博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QuickSort 快速排序
阅读量:4097 次
发布时间:2019-05-25

本文共 1507 字,大约阅读时间需要 5 分钟。

快速排序算法:

思路:

在QSort函数中,设置一个枢轴pivot,Partition函数中选择第一个数当作枢轴变量,经过循环交换,使得它左边的值都比它小,右边的值比它大;然后再递归调用QSort函数。
注:在最优的情况下,时间复杂度变O(nlogn);在最坏的情况下,时间复杂度为O(n^2)。空间复杂度为O(logn)。由于关键字的比较和交换是跳跃式进行的,因此,快速排序是一种不稳定的排序方法。

代码实现:

//快速排序(排序后为从小到大)#include 
#include
using namespace std; int Partition(int *p, int low, int high){ int pivotkey; pivotkey = *(p + low);//设置传进来的数组中第一个数为枢轴变量 while (low < high){ while (low < high&&*(p + high) >= pivotkey){
//如果low
=枢轴变量,则--high --high; } swap(*(p + low), *(p + high));//交换值 while (low < high&&*(p + low) <= pivotkey){ ++low; } swap(*(p + low), *(p + high)); } return low;//返回枢轴}void QSort(int *p,int low,int high){ int pivot;//设置枢轴,即在这个位置,它左边的值比它小,右边的值比它大 if (low < high){ pivot = Partition(p+low, 0, high-low);//用来初步排序 QSort(p+low, 0, pivot -1-low);//递归调用自己,这里传的p+low,是新截断数组第一个位置的指针,所以后面的要用0t pivot-1-low QSort(p + pivot + 1, 0, high - pivot - 1); }}void QuickSort(int (&a)[9]){ int asize = sizeof(a) / sizeof(a[0]);//取数组的大小 int *p = a;//指针p指向a的首地址 QSort(p, 0, asize - 1);}int main(){ int a[] = { 5, 1, 9, 3, 7, 4, 8, 6, 2 }; cout << "before sorted:" << endl; for (size_t i = 0; i < 9; ++i){
//输出 cout << a[i] << " "; } cout << endl; QuickSort(a); cout << "after sorted:" << endl; for (size_t i = 0; i < 9; ++i){
//输出 cout << a[i] << " "; } cout << endl; return 0;}

运行结果:

这里写图片描述

你可能感兴趣的文章
Linux更新python方法及报错处理
查看>>
Python3中无法导入ssl模块的解决办法和python3.7 ModuleNotFoundError: No module named bz2解决办法
查看>>
Linux下mysql数据库安装教程详解
查看>>
windows下mysql数据库迁移到linux方法
查看>>
ImportError: cannot import name ‘HTMLParseError‘ from ‘html.parser‘ (/lib/python3.7/html/parser.py)
查看>>
Linux查看CPU及核数方法
查看>>
java下载图片示例
查看>>
ubuntu14.04.2搭建MPI环境
查看>>
Ubuntu14.04上Hadoop安装问题之解决方案
查看>>
vi编辑下加载行号
查看>>
centOS终端下修改字体
查看>>
centos安装wine
查看>>
Ubuntu 终端打开方式
查看>>
2014-8-21
查看>>
常见传感器的红外(IR)和红光(R)波段
查看>>
2014年07月23日
查看>>
C++中fstream的使用方法
查看>>
strcat函数
查看>>
cout与cerr的区别
查看>>
conio.h
查看>>