快速排序
快速排序 时间复杂度分析: 快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间复杂度是O(n),而 整个 快速排序算法的实际复杂度与 划分的趟数 有关。 理想情况 :每次划分所选择的关键字key,恰好将当前序列几乎等分,经过 log 2 n \log_2^n lo g 2 n 趟划分,便可得到长度为1的子表。这样,整个算法的时间复杂度为 O ( n log 2 n ) O(n\log_2^n) O ( n lo g 2 n ) 。 最坏情况 :每次所选的中间数是当前序列中的最大或最小元素,这使得每次划分所得的子表中一个为空表,另一子表的长度为原表的长度-1。这样,长度为n的数据表的快速排序需要经过n趟划分,使得整个排序算法的时间复杂度为 O ( n 2 ) O(n^2) O ( n 2 ) 。 代码如下: # include <stdio.h> # include <stdlib.h> # define N 1000000 int a [ N ] ; int Partition ( int b [ ] , int low , int high ) { int key ; //划分点 key = b [ low ] ; while ( low < high ) { while ( low < high && b [ high ] >= key