经典排序算法之——快排
经典排序算法之——快排
时间复杂度:
O(nlogn)
空间复杂度:
O(log2n)
什么时候用快排
1、n较大
2、快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
图解:
代码:
#include <stdio.h> #define N 10 void my_qsort(int *arr,int l,int r) { if(l<r) { //基准数 int val = arr[l]; int i = l; int j = r; while(i<j) { //从右向左找比基准数小的数 while(i<j && arr[j] >= val) j--; //放到前面的空位 if(i < j) { arr[i++] = arr[j]; } //从左向右找比基准数大的数 while(i<j && arr[i] <= val) i++; //放到后面的空位 if(i < j) { arr[j--] = arr[i]; } } //将基准数放入 arr[i] = val; my_qsort(arr,l,i-1); my_qsort(arr,i+1,r); } } int main(void) { int a[N] = {1,4,7,8,5,2,3,6,9,0}; my_qsort(a,0,9); for(int i = 0;i<N;i++) printf("%d\t",a[i]); printf("\n"); return 0; }