QuickSort快速排序
来源:互联网 发布:c语言基础书籍推荐 编辑:程序博客网 时间:2024/06/06 00:22
快速排序是一种最常用的排序,速度快,占用空间少
常用排序算法速度比较动图https://www.toptal.com/developers/sorting-algorithms/
假设我们现在要对”6,1,2,7,9,3,4,5,10,8”这10个数进行排序。首先在这个序列中随便找一个数作为基准数(就是一个用来参照的数)。为了方便,就使用第一个数字6作为基准数。然后,所有比基准数大的数放在6的右边,比基准数小的数放在6的左边。
方法是,在序列的两端开始“探测”。先从右往左找一个比6小的数,再从左向右找一个比6大的数,然后交换他们。这里可以用两个变量i和j(给他们起个名字叫哨兵i和哨兵j),分别指向序列的最左边和最右边。刚开始时,哨兵i指向序列最左边(即i=1)的数字6。让哨兵j指向序列最右边(即j=10)的数字8。
用一张图来表示(来自啊哈!算法)
重复图片中的步骤,直至排序结束。
实际上,快速排序采用的方法是“二分”的思想,即所说的递归的思想。
快排在c中的表示
#include <stdio.h>int a[101],n;//全局变量,这连个变量需要在子函数中使用void quicksort(int left,int right){ int i,j,temp,t; if(left>right) return ; temp=a[left];//基准数 i = left; j = right; while(i!=j) { //顺序很重要,要先从右往左找 while(a[j]>=temp && i<j) { j--; } //在从左往又找 while(a[i]<=temp && i<j) i++; //交换两个数的位置 if(i<j) { t=a[i]; a[i]=a[j]; a[j]=t; } } //将基准数归位 a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); return;}int main(){ int i,j; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } quicksort(1,n); for(i=1;i<n;i++) { printf("%d ",a[i]); }}
运行结果
阅读全文
1 0
- 快速排序(quicksort)
- QuickSort(快速排序)
- 快速排序(quicksort)
- 快速排序QuickSort
- 快速排序(QuickSort)
- QuickSort(快速排序)
- 快速排序(quickSort)
- 快速排序(Quicksort)
- 快速排序 QuickSort
- 快速排序QuickSort.c
- Quicksort 快速排序源程序
- QuickSort 快速排序
- quicksort快速排序
- quicksort快速排序
- (C#)快速排序 Quicksort
- 快速排序算法QuickSort
- 快速排序(QuickSort)
- 快速排序(QuickSort)
- Hdu 6212 Zuma 区间DP
- Java中hashCode的作用(就好比菜篮子)
- (二)hadoop源码学习之Configuration
- python的urllib2和beautifulsoup编写爬虫
- 线段树 高速公路(road)
- QuickSort快速排序
- git知识总结
- SB树
- linux中文乱码解决
- Composer自动加载实现
- poj2992(求因子个数)
- Angular表单验证
- [数位DP] Codeforces #809C. Find a car
- python 关于循环链表的实现