
//
// main.c
// 选择排序
//
// Created by king on 15/10/20.
// Copyright © 2015年 king. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义数组
int array[5] = {23, 56, 36, 89, 50};
// 计算数组长度
int length = sizeof(array) / sizeof(array[0]);
// 遍历数组(无序)
for (int i = 0; i < length; i++) {
printf("array[%d] = %d\n", i, array[i]);
}
printf("----------------------\n");
// length - 1 防止越界 ,因为最后一个不需要在比较了
for (int i = 0; i < length - 1; i ++) {
for (int j = i + 1; j < length; j++) {
if (array[i] > array[j]) {
// 定义临时变量,用于交换变量
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
// 遍历数组(排序后)
for (int i = 0; i < length; i++) {
printf("array[%d] = %d\n", i, array[i]);
}
return 0;
}

//
// main.c
// 冒泡排序
//
// Created by king on 15/10/20.
// Copyright © 2015年 king. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义数组
int array[5] = {23, 56, 36, 89, 50};
// 计算数组长度
int length = sizeof(array) / sizeof(array[0]);
// 遍历数组(无序)
for (int i = 0; i < length; i++) {
printf("array[%d] = %d\n", i, array[i]);
}
printf("----------------------\n");
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 -i; j++) {
// 两两比较
if (array[j] > array[j+1]) {
// 交换变量
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
// 遍历数组(排序后)
for (int i = 0; i < length; i++) {
printf("array[%d] = %d\n", i, array[i]);
}
return 0;
}

//
// main.c
// 折半查找
//
// Created by king on 15/10/20.
// Copyright © 2015年 king. All rights reserved.
//
#include <stdio.h>
int findKey(int array[], int length, int key);
int main(int argc, const char * argv[]) {
// 定义数组
int nums[10] = {15, 20, 35, 40, 46, 56, 59, 68, 76, 90};
// 数组长度
int length = sizeof(nums) / sizeof(nums[0]);
// 需要查找的key
int key = 46;
printf("%d == nums[%d]\n", key, findKey(nums, length, key));
return 0;
}
#pragma mark --查找key
int findKey(int array[], int length, int key)
{
int min, max, mid;
min = 0;
max = length - 1;
// 只要还在我们的范围内就需要查找
while (min <= max) {
// 计算中间值
mid = (min + max) / 2;
if (key > array[mid]) {
min = mid + 1;
}else if (key < array[mid])
{
max = mid - 1;
}else
{
return mid;
}
}
return -1; // 找不到就返回 -1
}
进制查表法
//
// main.c
// 进制查表法
//
// Created by king on 15/10/20.
// Copyright © 2015年 king. All rights reserved.
//
// 十进制转十六进制 八进制 二进制
#include <stdio.h>
void total(int value, int base, int offset);
void ptintBinary(int num);
void printfOct(int num);
void printfHex(int num);
int main(int argc, const char * argv[]) {
printf("十六进制:"),printfHex(101010);
printf("八进制:"),printfOct(10545);
printf("二进制:"),ptintBinary(9546);
return 0;
}
#pragma mark -- 转十六进制
void printfHex(int num)
{
total(num, 15, 4);
}
#pragma mark -- 转八进制
void printfOct(int num)
{
total(num, 7, 3);
}
#pragma mark -- 转二进制
void ptintBinary(int num)
{
total(num, 1, 1);
}
/**
* 转换所有的进制
*
* @param value 需要转换的数值
* @param base 需要&上的数
* @param offset 需要右移的位数
*/
void total(int value, int base, int offset)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
char charValues[] = {‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘};
// 2.定义一个数组, 用于保存查询后的结果
char results[32] = {‘0‘};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = sizeof(results)/ sizeof(results[0]);
while (value != 0) {
// 1.取出1位的值
int res = value & base;// 1 7 15
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的1位
value = value >> offset;// 1 3 4
}
// 4.打印结果
for (int i = pos; i < 32; i++) {
printf("%c", results[i]);
}
printf("\n");
}
原文:http://www.cnblogs.com/liujingde78/p/4897205.html