基本概念:快速排序是一种非常高效的排序方法,采用“分而治之”的思想,把大的拆分为小的,小的在拆分为更小的。
原理是:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前部分的所有记录均比后部分的所有记录
小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均为有序为止。
快速排序特点:
稳 定 性:不稳定。
平均时间复杂度: O(nlog2n)。
1 #include <iostream> 2 3 using namespace std; 4 5 void Sort(int array[], int low, int high) 6 { 7 int i, j; 8 int index; 9 10 if (low >= high) 11 { 12 return; 13 } 14 15 i = low; 16 j = high; 17 index = array[i]; 18 19 while (i < j) 20 { 21 while (i < j && array[j] >= index) 22 { 23 j--; 24 } 25 if (i < j) 26 { 27 array[i++] = array[j]; //互换位置 28 } 29 while (i < j && array[i] < index ) 30 { 31 i++; 32 } 33 if (i < j) 34 { 35 array[j--] = array[i]; //互换位置 36 } 37 } 38 array[i] = index; 39 Sort(array, low, i - 1); 40 Sort(array, i + 1, high); 41 } 42 43 void QuickSort(int array[], int length) 44 { 45 Sort(array, 0, length - 1); 46 } 47 48 int main() 49 { 50 int i = 0; 51 int a[] = {29, 96, 18, 56, 3, 56, 39, 77}; 52 int length = sizeof (a) / sizeof(a[0]); 53 54 QuickSort(a, length); 55 56 for (i = 0; i < length; i++) 57 { 58 printf("%d ", a[i]); 59 } 60 printf("\n"); 61 while(1); 62 63 return 0; 64 }