快速排序(交换排序的一种)

 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)。

posted @ 2018-07-31 08:16  此女子  阅读(186)  评论(0编辑  收藏  举报