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

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

转载于:https://www.cnblogs.com/cinvzi/p/9393938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值