快速排序和二分搜索
Posted HelloCoding08
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序和二分搜索相关的知识,希望对你有一定的参考价值。
快速排序
时间复杂度:最好O(nlogn)。最差O(n^2)。
空间复杂度:O(logn)。
稳定性:不稳定
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
//array:需要排序的数组
//begin:需要排序的左边界
//end:需要排序的右边界
int quick (int* array, int begin, int end){
//将区间的第一数作为基准数
int temp = array[begin];
int i = begin;
int j = end;
while(i < j){
while(i < j && array[j] > temp){
j--;
}
array[i] = array[j];
while(i < j && array[i] <= temp){
i++;
}
array[j] = array[i];
}
//当i == j时跳出循环。将temp赋予空位
array[i] = temp;
//返回基准的下标
return i;
}
void quick_sort(int* array, int begin, int end){
if(begin < end){
int i = quick(array, begin, end);
quick_sort(array, begin, i - 1);
quick_sort(array, i + 1, end);
}
}
void show (int* array, int size){
for(int i = 0; i < size; i++){
printf("%d\t", array[i]);
}
printf("\n");
}
int main () {
int array[] = {3, 1, 4, 5, 9, 2, 6, 7, 8};
int size = 9;
quick_sort(array, 0, size - 1);
show(array, size);
return 0;
}
二分搜索
时间复杂度:log2(N)
//array:需要排序的数组
//size:数组的长度
//target:寻找的目标
int binary_search(int* array, int size, int target){
int left = 0;
int right = size;
//左闭右开
while(left < right){
//防止发生整数溢出
int mid = left + (right - left)/2;
if(array[mid] == target){
return mid;
//要注意边界
} else if(target > array[mid]){
left = mid + 1;
} else{
right = mid;
}
}
return -1;
}
int main(){
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = 10;
int target = 3;
int result = binary_search(array, size, target);
printf("result = %d\n", result);
}
以上是关于快速排序和二分搜索的主要内容,如果未能解决你的问题,请参考以下文章