程序员必会算法---快速排序
2020-08-20 12:50
281 查看
快排思想
首先从待排序数组任取一个元素(方便起见可以选择数组第一个元素),以此元素为基准,把小于等于基准的元素移到基准左侧,大于基准的元素移到基准右侧。以此基准为界,前面的元素小于等于基准元素,后面的元素大于等于基准元素,这个过程称为快排的一次划分。然后对两个子序列分别重复上述过程,直到完成排序。
快排是通过递归实现的,是一种时间复杂度为O(nlogn)的不稳定排序算法。
#include <iostream> using namespace std; void qSortArray(int array[], int start, int last) { int low = start; int high = last; if (low < high) { while (low < high) { while (array[low] <= array[start] && low < last) { low++;//满足小于基准的条件,指针右移 } while (array[high] >= array[start] && high > start) { high--;//满足大于基准的条件,指针左移 } if (low < high) { swap(array[low], array[high]);//交换两个不满足条件的元素 } else { break; } } swap(array[start], array[high]);//插入基准元素 qSortArray(array, start, high - 1); qSortArray(array, high + 1, last); } } void printArray(int array[], int len) { for (int i = 0; i < len; i++) { cout << array[i] << " "; } cout << endl; } int main() { int a[] = { 3, 9, 2, 1, 0, 10, 11, 8, 4, 50 }; int len = sizeof(a) / sizeof(a[0]); cout << "排序前:" << " "; printArray(a, len); qSortArray(a, 0, len - 1); cout << "排序后:" << " "; printArray(a, len); system("pause"); return 0; }
相关文章推荐
- 程序员必须知道的十大算法之 快速排序
- 程序员如何快速准备面试中的算法【转】
- 算法导论之快速排序
- 快速排序——一步一步算法篇
- 算法:快速排序
- 算法学习之三:快速排序
- 算法-快速排序-java实现
- 第十六周 项目1 验证算法 希尔排序 快速排序
- 程序员编程艺术(算法卷):第十章、如何给10^7个数据量的磁盘文件排序
- 第16周项目1-验证算法(4)快速排序
- 白话经典算法系列之六 快速排序 快速搞定(转)
- 【算法理解】—— 快速排序 v2.0
- 第16周项目1 验证算法(4)快速排序
- 快速排序C语言算法实现
- 啊哈算法-----快速排序
- 每天一种算法--快速排序
- 白话经典算法系列之六 快速排序 快速搞定
- 算法之常见排序算法-冒泡排序、归并排序、快速排序
- 如何理解插入排序、希尔排序、选择排序、冒泡排序、归并算法、快速排序
- 白话经典算法系列之六 快速排序 快速搞定