快速排序和二分搜索

Posted HelloCoding08

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序和二分搜索相关的知识,希望对你有一定的参考价值。

快速排序

时间复杂度:最好O(nlogn)。最差O(n^2)。

空间复杂度:O(logn)。

稳定性:不稳定

该方法的基本思想是:

        1.先从数列中取出一个数作为基准数。

        2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

        3.再对左右区间重复第二步,直到各区间只有一个数。  

#include <stdio.h>
//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)

#include <stdio.h>//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);}


以上是关于快速排序和二分搜索的主要内容,如果未能解决你的问题,请参考以下文章

二分查找和快速排序(理论+代码)

算法复习_分治算法之二分搜索棋盘覆盖快速排序

使用二分搜索查找多个条目

OI已学知识点总结

快速排序模板秦九昭算法模板深度优先搜索DFS广度优先搜索BFS图的遍历逆元中国剩余定理斯特林公式

算法基础班 1.快速排序