十大基础实用算法补全——快速排序(QuickSort)
来源:互联网 发布:iwatch3蜂窝网络 编辑:程序博客网 时间:2024/06/06 10:51
快速排序是排序算法中效率相对较高的,但使用的人却是比较少。大家一般信手拈来的排序算法就是冒泡排序,因为冒泡排序主观,容易理解。而快速排序使用到了递归,大家可能就有点不知所措了。(以上5毛)
算法简介
快速排序由C. A. R. Hoare在1962年提出。
基本思想:
通过一趟排序将要排序的数据列分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小;
然后再按此方法对这两部分子数据列分别1操作,直到子数据的大小为0或1。
算法步骤:
- 设置left、right变量用于记录移动下标;
- 从数列中挑出一个元素,记称为 value,一般选择array[start]或array[end](此处我们选取array[start]);
- 从right开始向前搜索(right--),找到第一个小于value的值array[right],将array[right]赋给array[left] (此处array[left]已被记录,故不用担心被覆盖);
- 从left开始向后搜索(left++),找到第一个大于value的值array[left],将array[left]赋给array[right](同理:此处array [right] 已被记录,故不用担心被覆盖);
- 重复3、4步,直到 left==right;
- 递归以上步骤完成对整个数列排序。
代码实现
本例为升序排列,且用较为简单的数据来演示
#include <stdio.h>void printArray(int *array, int length){ printf("array:\n"); for (int index = 0; index < length; index++) { printf(" %d", *(array + index)); } printf("\n\n");}void quickSort(int array[], int start, int end){ if (start >= end) //数列size为0或1 { //递归出口 return; } //因为需要对元素进行移动,需复制一份左右下标用于移动 int left = start; int right = end; int value = array[start]; //选取数列第一个元素为基准 while (left < right) { while (left < right && value <= array[right])//从后选取第一个小于基准的元素 { right--; } array[left] = array[right];//换位。此处会产生自己赋值自己情况,可加判断取消 /*printf("后向前移"); printArray(array, 4);*/ while (left < right && value >= array[left])//从前选择第一个大于基准的元素 { left++; } array[right] = array[left];//换位 /*printf("前向后移"); printArray(array, 4);*/ } array[left] = value; /*printf("一次完成"); printArray(array, 4);*/ //递归 quickSort(array, start, left - 1); quickSort(array, left + 1, end);}int main(){ int array[4] = { 2,3,1,4 }; printArray(array, 4); quickSort(array, 0, 3); printArray(array, 4); return 0;}
运行结果:
复杂度分析
关于快速排序的时间复杂度和空间复杂度,大家可以参考:排序算法之 快速排序 及其时间复杂度和空间复杂度
刚玩博客,如果有什么错误之处或建议,请在评论区告诉我,谢谢!
0 0
- 十大基础实用算法补全——快速排序(QuickSort)
- 十大基础实用算法补全——堆排序(HeapSort)
- 十大基础实用算法补全——归并排序(MergeSort)
- 十大基础实用算法补全——二分查找(BinSearch)
- 十大基础实用算法补全——BFPRT算法
- 十大基础实用算法之快速排序和堆排序
- 经典算法—快速排序(Quicksort)使用详解
- 快速排序算法(QuickSort)
- 排序——快速排序(QuickSort)
- 排序——快速排序(QuickSort)
- 十大算法系列之(一)——快速排序
- 排序算法 之 快速排序(quicksort)
- 排序算法(QuickSort快速排序)
- 【排序算法】-快速排序(QuickSort)
- 快速排序算法QuickSort
- 快速排序算法QuickSort
- 快速排序(QuickSort)算法
- QuickSort 快速排序算法
- SSH用getHibernateTemplate()更新需要更新的字段
- linux常用命令find笔记
- OpenGL系列教程(2)——OpenGL基础(1)
- Python爬虫系列之----Scrapy(七)使用IP代理池
- listview与adapter用法
- 十大基础实用算法补全——快速排序(QuickSort)
- Myeclipse详细使用教程
- MyBatis--注解式开发
- FZU 2150 Fire Game (双起点BFS)
- 使用CharacterController控制行走(包括键盘和虚拟杠)
- redis密码设定
- PBC库传入参数文件问题
- WebService 的创建,部署和使用
- JAVA监视某文件夹并对文件夹里的文件做操作