1 // QuickSort.cpp : 定义控制台应用程序的入口点。 2 // 3 //快速排序采用分治策略,Devide-and-ConquerMethod 4 5 #include "stdafx.h" 6 #include "stdio.h" 7 8 void QuickSort(int a[], int left, int right) 9 { 10 int i = left; 11 int j = right; 12 int base = a[left]; 13 14 if (left >= right) 15 { 16 return; 17 } 18 19 while (i != j) 20 { 21 //从后往前找,找到比base小的,赋值给i的位置 22 while (i < j && a[j] >= base) 23 { 24 j--; 25 } 26 a[i] = a[j]; 27 28 //从前往后找,找到比base大的,赋值给j的位置 29 while (i < j && a[i] <= base) 30 { 31 i++; 32 } 33 a[j] = a[i]; 34 } 35 //插入基准数 36 a[i] = base; 37 38 //递归排列以基准数划分的前后两个数组 39 QuickSort(a, left, i-1); 40 QuickSort(a, i+1, right); 41 }
快速排序是不稳定的算法,它不满足稳定算法的定义:
算法稳定性:假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面,并且排序之后,a[i]仍然在a[j]前面,则这个排序算法是稳定的。
快速排序算法的时间复杂度在最坏情况下是O(N^2),平均的时间复杂度是O(N*logN)。