算法导论学习--快速排序--Quicksort
2016-05-15 16:30
381 查看
快排采用的是分治的算法思想,将一个无序数列取一个基元.此处将最右边的元素作为基准.
第一次:5,8,13,6,7,52,64,2,40,1 ← r-1(基准下标,作为第一次判断)
i=-1,j=0;
j=1:判断8>1–j++;
j=2:判断13>1–j++;
j=3:判断6>1–j++;
…… (之间均无比1小的元素)
j=r-1:判断40>1–j++;
change:A[r-1]←→A[i+1]//当i取得值为中间某值时经由上述判断,A[i]之后的均为大于等于基准的值.A[i]之前的值均为小于等于基准的值.
故这个值一旦进行swap后,这个值就确定在该位置,
之后进行对左边进行大小排序(大小排序只是确定该基准左边为大于该基准的值,右边为小于该基准的值,但并不提供排序).
之后将这个值”搁置争议”再对左右进行大小排序,排序到最后得到的则是已经排好顺序的值.
加油!!
第一次:5,8,13,6,7,52,64,2,40,1 ← r-1(基准下标,作为第一次判断)
i=-1,j=0;
j=1:判断8>1–j++;
j=2:判断13>1–j++;
j=3:判断6>1–j++;
…… (之间均无比1小的元素)
j=r-1:判断40>1–j++;
change:A[r-1]←→A[i+1]//当i取得值为中间某值时经由上述判断,A[i]之后的均为大于等于基准的值.A[i]之前的值均为小于等于基准的值.
故这个值一旦进行swap后,这个值就确定在该位置,
之后进行对左边进行大小排序(大小排序只是确定该基准左边为大于该基准的值,右边为小于该基准的值,但并不提供排序).
之后将这个值”搁置争议”再对左右进行大小排序,排序到最后得到的则是已经排好顺序的值.
加油!!
#include<stdio.h> Sort(int *disorder,int p,int r) { Quicksort(disorder,p,r); } int PARTITION(int *A,int p,int r) { int x=A[r];//主元为最右边元素 int i=p-1,j=p,temp; for(;j<=r-1;j++) { if(A[j]<=x) { i++; temp=A[j]; A[j]=A[i]; A[i]=temp; } } temp=A[r]; A[r]=A[i+1]; A[i+1]=temp; return i+1; } Quicksort(int *A,int p,int r) { int q; if(p<r) { q=PARTITION(A,p,r);//q:接收当前排序结束后最终指向的基准 Quicksort(A,p,q-1);//对左继续 Quicksort(A,q+1,r);//对右继续 } } int main() { int disorder[10]={5,8,13,6,7,52,64,2,40,1}; int p=10,i;//p=length(disorder),以p-1为基准 Sort(disorder,0,p-1); for(i=0;i<p;i++) printf("%d ",disorder[i]); }
相关文章推荐
- [leetcode]347. Top K Frequent Elements
- MQTT协议 - Mosquitto安装测试
- J Arithmetic Sequence (华农第四届) 求数组中最长等差数列
- Ex2010-06 Get version number, build number
- android UI——2D绘图中应该注意的那些坑
- requirejs搭建前端框架
- Problem J: Arithmetic Sequence
- Arduino 与 土壤湿度传感器 测量土壤湿度自动浇水提醒
- Map的按value值排序
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解(转载)
- CodeForces 559B Equivalent Strings
- RequireJS使用注意细节
- RequireJS使用注意地方
- Frequent Pattern 挖掘之二(FP Growth算法)
- 深入理解容器系列之三--------LinkedList、Stack、Queue、PriorityQueue的总结
- iOS开发UI篇—UIScrollView控件简单使用
- Android view中的requestLayout和invalidate方法
- Primefaces menu中的menuitem过多产生的问题
- 错误The request sent by the client was syntactically incorrect ()的解决
- Window和DecorView