一、定义
快速排序是一种较为复杂的排序方式,其时间复杂度为nlog2n。
算法的思想:
首先我们是以数组开头元素为基准的我们先用一个变量来存放它,我们用两个指针来指向该数组
的头和尾,我们默认以升序排序。如果头指针的值大于等于基准数,不做任何变化,让指针指向
下一个元素,否则头指针元素和尾指针元素进行交换。如果尾指针元素小于基准元素则不做任何
改变让尾指针指向它的上一个元素,否则头指针元素和尾指针元素进行交换。这种操作持续到头
指针和尾指针指向同一个元素为止。当第一趟完成时基准元素左边都是比它小的右边都是比他大
的。然后将基准值左侧和右侧再做上述操作。
二、使用
void fast_sort(int *array,int low,int high) { if(low>=high) { return ; } int i = low;//头元素 int j = high;//尾元素 int pv = array[low];//头元素做基准 while (low < high) { while ((low<high)&&(array[high]>=pv)) { high --; } array[low] = array[low]+array[high];//交换 array[high]=array[low]-array[high]; array[low] = array[low]-array[high]; while((low<high)&&(array[low]<=pv)) { low ++; } array[low] = array[low]+array[high];//交换 array[high]=array[low]-array[high]; array[low] = array[low]-array[high]; } array[low] = pv;//尾指针指向基准 fast_sort(array,i,low-1);//位于基准递归调用 fast_sort(array,low+1,j);//位于基准右侧调用 }
void print(int *p) { int i; for (i=0;i<10;i++) { printf("%d\n",p[i]); } }
int main() { int array[10]={49,38,65,97,76,13,27,48,55,4}; fast_sort(array,0,9); print(array); }
欢迎各位指出不足之处