排序算法-快速排序法(QuickSort)
1、说明
快速排序法是由C.A.R.Hoare提出来的。快速排序法又称分割交换排序法,是目前公认的最佳排序法,也是使用分而治之(Divide and Conquer)的方式,会先在数据中找到一个虚拟的中间值,并按此中间值将所有打算排序的数据分为两部分。其中小于中间值的数据放在左边,而大于中间值的数据放在右边,再以同样的方式分别处理左右两边的数据,直到排序完为止。操作与分割步骤如下:
假设有n项记录,其键值为。
- 先假设K的值为第一个键值。
- 从左向右找出键值,使得。
- 从左向右找出键值,使得。
- 如果,那么与互换,并回到步骤2。
- 如果,那么将与互相,并以为基准点分割成左、右两部分,然后针对左、右两边执行步骤1~5,直到左边键值等于右边键值为止。
2、算法分析
- 在最好情况和平均情况下,时间复杂度为。在最坏情况下就是每次挑中的中间值不是最大就是最小的,其时间复杂度为。
- 快速排序法不是稳定排序法。
- 在最坏情况下,服务器托管网空间复杂度为,而在最好情况下,空间复杂度为。
- 快速排序法是平均运行时间最快的排序法。
3、C++代码
#include
using namespace std;
void Print(int tempData[], int tempSize) {
for (int i = 0; i = tempData[tempLeft]) {
leftIndex = i;
break;
}
leftIndex++;
}
for (int j = tempRight; j > tempLeft + 1; j--) 服务器托管网{
if (tempData[j] = rightIndex) {
temp = tempData[tempLeft];
tempData[tempLeft] = tempData[rightIndex];
tempData[rightIndex] = temp;
Quick(tempData, tempLeft, rightIndex - 1);
Quick(tempData, rightIndex + 1, tempRight);
}
}
}
int main() {
const int size = 10;
int data[100] = { 32,5,24,55,40,81,17,48,25,71 };
//32 5 24 55 40 81 17 48 25 71
//32 5 24 25 40 81 17 48 55 71
//32 5 24 25 17 81 40 48 55 71
//17 5 24 25 32 81 40 48 55 71
//5 17 24 25 32 81 40 48 55 71
//5 17 25 24 32 81 40 48 55 71
//5 17 25 24 32 71 40 48 55 81
//5 17 25 24 32 55 40 48 71 81
//5 17 25 24 32 48 40 55 71 81
//5 17 25 24 32 40 48 55 71 81
Print(data, size);
Quick(data, 0, size - 1);
Print(data, size);
return 0;
}
输出结果
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
Ruoyi 是一个基于 Vue.js 和 Spring Boot 框架构建的开源前后端分离的企业级快速开发平台。它遵循了前后端分离的架构模式,将前端和后端进行解耦,使得系统更加灵活、可扩展和易于维护。 Ruo服务器托管网yi 的前端部分采用了 Vue.js 框…