简单的算法
选择排序(升序) :第一个依次和第二个、第三个、第四个、、、比较,如果第一个大于(
升序
)对比的那个,就将俩个数的位置交换,一轮之后,我们得到最小
的数字在数组的最左边
。
然后第二轮从第二个
开始依次和第三个、第四个、、、比较,如果大于对比的那个继续交换位置,一直到最后一轮
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@4,@1,@10,@5,@2,@88,@3]];
for (int i = 0;i < array.count ; i ++) {
for (int j = 1 + i; j < array.count ; j ++) {
// 升序
if ([array[i] integerValue] > [array[j] integerValue]) {
NSNumber *temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
冒泡排序(升序):第一轮第一个和第二个比较,如果第一个大于(
升序
)第二个,就将他俩的位置交换,然后第二个和第三个比较,同样,如果第二个大于第三个,交换他俩位置,一直到倒数第二个和最后一个比较,最后得到数组中最大
的一个在最右边
。
第二轮,还是从第一个开始,第一个与第二个比较,如果大于(升序
)第二个,将他俩的位置交换,然后第二个和第三个比较,直到倒数第三个与倒数第二个比较,这一轮得到第二大的数放在邮编的倒数第二个位置、、然后第三轮,一直到最后一轮。
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@4,@1,@10,@5,@2,@88,@3]];
for (int i = 0;i < array.count ; i ++) {
for (int j = 0; j < array.count - i - 1 ; j ++) {
//升序
if ([array[j] integerValue] > [array[j + 1] integerValue]) {
NSNumber *temp;
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
C语言
折半查找:在一个有序
的数组中 ,找出要查找数的下标
查找对应key的下标,找不到返回-1
//声明 函数
int findUniqueKey(int nums[], int length, int key);
//创建有序数组
int nums[] = {1,3,5,7,9};
//获取到数组长度
int length = sizeof(nums)/sizeof(nums[0]);
//要查找的数
int key = 7;
//调用
int result = findInsertIndex(nums, length, key);
printf("下标为%i\n",result);
查找对应key的下标函数,找不到返回-1
int findUniqueKey(int nums[], int length, int key){
//每次对比时候最小的数
int min = 0;
//每次对比时候最大的数
int max = length - 1;
//每次对比时候中间的数
int mid = (min + max)/2;
while (nums[mid] != key) {
if (key > nums[mid]) {
min = mid + 1;
} else if (key < nums[mid]) {
max = mid - 1;
}
if (min > max) {
return -1;
}
mid = (min + max)/2;
}
return mid;
}
关于折半查找的面试题:将一个数插入一个有序的数组之后,还保持数组的有序性,求插入的位置(下标)
最后我们要找的是 当条件第一次不符合时候(
最小值大于最大值
),min的值为我们要求的值
//声明 函数
int findInsertIndex(int nums[], int length, int key);
//创建有序数组
int nums[] = {1,3,5,7,9};
//获取到数组长度
int length = sizeof(nums)/sizeof(nums[0]);
//要插入的数
int key = 6;
//调用
int result = findInsertIndex(nums, length, key);
printf("下标为%i\n",result);
int findInsertIndex(int nums[], int length, int key) {
int min,mid,max;
min = 0;
max = length - 1;
mid = (min + max)/2;
while(min <= max) {
if (key < nums[mid]) {
max = mid - 1;
} else if (key > nums[mid]) {
min = mid + 1;
}
mid = (min + max)/2;
}
return min;
}
网友评论