目录

​快速排序算法原理​

​快速排序算法的使用场景​

​快速排序算法的实现​

​快速排序算法的运行结果​


 

快速排序算法原理

      快速排序算法首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分为“比基准值小的数”和“比基准值大的数”这两个类别,再将其排列成以下形式。分割子序列时需要选择基准值,如果每次选择的基准值都能使得两个子序列的长度为原本的一半,那么快速排序的运行时间和归并排序的一样,都为O(nlogn)。和归并排序类似,将序列对半分割log2n次之后,子序列里便只剩下一个数据,这时子序列的排序也就完成了。因此,如果像下图这样一行行地展现根据基准值分割序列的过程,那么总共会有log2n行分割子序列时需要选择基准值,如果每次选择的基准值都能使得两个子序列的长度为原本的一半,那么快速排序的运行时间和归并排序的一样,都为O(nlogn)。和归并排序类似,将序列对半分割log2n次之后,子序列里便只剩下一个数据,这时子序列的排序也就完成了。因此,如果像下图这样一行行地展现根据基准值分割序列的过程,那么总共会有log2n行。

 

快速排序算法的使用场景

 

快速排序算法的实现

void QuickSort(int *a, int left, int right)
{
int i = left;
int j = right;
int key = a[left];

if(left >= right)
return;

Printf("Sort before:", a, right+1);
printf("left=%d, right=%d, KeyValue=%d\n", left, right, key);
printf("\n\n");

while(i < j)
{
while(i < j && key <= a[j])
j--;

a[i] = a[j];

while(i < j && key >= a[i])
i++;

a[j] = a[i];
}

a[i] = key;
QuickSort(a, left, i-1);
Printf("Sort after1:", a, right+1);
printf("\n\n");
QuickSort(a, i+1, right);
Printf("Sort after2:", a, right+1);
printf("\n\n");


}

int main(int argc, char *argv[])
{
int iArray[] ={10, 23, 65, -101, 10000, 999};
int *piArryTmp;

QuickSort(iArray, 0, sizeof(iArray)/sizeof(iArray[0])-1);

system("pause");
return 0;
}

快速排序算法的运行结果

Sort before:
10 23 65 -101 10000 999
left=0, right=5, KeyValue=10


Sort after1:
-101 10 65 23 10000 999


Sort before:
-101 10 65 23 10000 999
left=2, right=5, KeyValue=65


Sort after1:
-101 10 23 65 10000 999


Sort before:
-101 10 23 65 10000 999
left=4, right=5, KeyValue=10000


Sort after1:
-101 10 23 65 999 10000


Sort after2:
-101 10 23 65 999 10000


Sort after2:
-101 10 23 65 999 10000


Sort after2:
-101 10 23 65 999 10000


Press any key to continue . . .