int main(int argc, const char * argv[]) {
#冒泡排序
int array[] = {3,7,5,2,9,4,1,8,6};//冒泡优化条件:数据有明显的分界
int count = sizeof(array) / sizeof(*array);//*array = array[0]
for (int i = 0; i < count - 1; i ++) {
BOOL flag = NO;
for (int j = 0; j < count - i -1; j ++) {
if (array[j] > array[j + 1]) {
int tmp = array[j + 1];
array[j + 1] = array[j];
array[j] = tmp;
flag = YES;
}
}
if (flag == NO) {
break;
}
}
for (int i = 0; i < count; i ++) {
printf("%d",array[i]);
}
printf("\n");
NSInteger money = 10000000000000;
int num = 0;
while (money > 0) {
money = money / 2;
num ++;
}
printf("%d\n",num);
#折半查找
//数组的下标是偏移量
int start = 0;
int end = count - 1;
int mid = (start + end) / 2;//中点下标
int target = 7;
while (start <= end) {
if (array[mid] < target) {
start = mid + 1;
}
else if (array[mid] > target) {
end = mid - 1;
}
else {
break;
}
mid = (start + end) / 2;
}
if (start > end) {
printf("没有找到");
}
else {
printf("%d\n",mid);
}
return 0;
}
#pragma 插入算法
for (int i = 0; i < count; i ++) {
int j = i;
int tmp = array[j];
while(j > 0 && array[j - 1] > tmp) {//j>0一定要写在前边控制越界
array[j] = array[j - 1];
j --;
}
array[j] = tmp;
}
for (int i = 0; i < count; i ++) {
printf("%d",array[i]);
}
快速查找
void quickSort(int count, int array[]) {
//设置递归出口(出口要写在递归最前边)
if (count < 2) {
return;
}
int start = 0;
int end = count - 1;
int tmp = array[0];
//2^k = n
//k = log2^n o(n * log^n)
while (start < end) {
while (start < end && array[end] > tmp) {
end --;
}
if (start < end) {
array[start] = array[end];
start ++;
}
while (start < end && array[start] < tmp) {
start ++;
}
if (start < end) {
array[end] = array[start];
end --;
}
}
array[start] = tmp;
quickSort(start, array);
quickSort(count - start - 1, array + start + 1);
}
int main(int argc, const char * argv[]) {
quickSort(count, array);
for (int i = 0; i < count; i ++) {
printf("%d",array[i]);
}
}
#冒泡排序
int array[] = {3,7,5,2,9,4,1,8,6};//冒泡优化条件:数据有明显的分界
int count = sizeof(array) / sizeof(*array);//*array = array[0]
for (int i = 0; i < count - 1; i ++) {
BOOL flag = NO;
for (int j = 0; j < count - i -1; j ++) {
if (array[j] > array[j + 1]) {
int tmp = array[j + 1];
array[j + 1] = array[j];
array[j] = tmp;
flag = YES;
}
}
if (flag == NO) {
break;
}
}
for (int i = 0; i < count; i ++) {
printf("%d",array[i]);
}
printf("\n");
NSInteger money = 10000000000000;
int num = 0;
while (money > 0) {
money = money / 2;
num ++;
}
printf("%d\n",num);
#折半查找
//数组的下标是偏移量
int start = 0;
int end = count - 1;
int mid = (start + end) / 2;//中点下标
int target = 7;
while (start <= end) {
if (array[mid] < target) {
start = mid + 1;
}
else if (array[mid] > target) {
end = mid - 1;
}
else {
break;
}
mid = (start + end) / 2;
}
if (start > end) {
printf("没有找到");
}
else {
printf("%d\n",mid);
}
return 0;
}
#pragma 插入算法
for (int i = 0; i < count; i ++) {
int j = i;
int tmp = array[j];
while(j > 0 && array[j - 1] > tmp) {//j>0一定要写在前边控制越界
array[j] = array[j - 1];
j --;
}
array[j] = tmp;
}
for (int i = 0; i < count; i ++) {
printf("%d",array[i]);
}
快速查找
void quickSort(int count, int array[]) {
//设置递归出口(出口要写在递归最前边)
if (count < 2) {
return;
}
int start = 0;
int end = count - 1;
int tmp = array[0];
//2^k = n
//k = log2^n o(n * log^n)
while (start < end) {
while (start < end && array[end] > tmp) {
end --;
}
if (start < end) {
array[start] = array[end];
start ++;
}
while (start < end && array[start] < tmp) {
start ++;
}
if (start < end) {
array[end] = array[start];
end --;
}
}
array[start] = tmp;
quickSort(start, array);
quickSort(count - start - 1, array + start + 1);
}
int main(int argc, const char * argv[]) {
quickSort(count, array);
for (int i = 0; i < count; i ++) {
printf("%d",array[i]);
}
}