郝斌数据结构之快排

快速排序的过程演示:



代码:

[cpp]  view plain copy
  1. 来自郝斌老师数据结构  
  2. 排序:  
  3. 冒泡  
  4. 插入:从头开始选择第2个按大小插入前2个之间,再将第3个按大小插入前俩个之间依次。。。  
  5. 选择  
  6. 快速排序:快排通过确定一个值的位置,然后将其分为二半,分别进行再次确定位置  
  7. 归并排序:俩俩排序,然后四四归并排,再八八排  
  8. #include<stdio.h>  
  9. int FindPos(int *a,int low,int high);  
  10. void QuickSort(int *a,int low,int high);  
  11. int main(void)  
  12. {  
  13.     int i;  
  14. int a[7]={5,2,6,8,4,3,7};  
  15.  QuickSort(a,0,6);  
  16.  printf("快排从小到大:");  
  17.  for(i=0;i<7;i++)  
  18.  printf("%d ",a[i]);  
  19.  printf("\n");  
  20. return 0;  
  21. }  
  22. void QuickSort(int *a,int low,int high)//快排通过确定一个值的位置,然后将其分为二半,  
  23.                                                        //分别进行再次确定位置  
  24. {  
  25.     int pos;  
  26.     if(low<high)     //采用递归  
  27.     {  
  28.      pos=FindPos(a,low,high);  
  29.      QuickSort(a,low,pos-1);  
  30.      QuickSort(a,pos+1,high);  
  31.      }  
  32.   
  33. }  
  34. int FindPos(int *a,int low,int high)//确定位置  
  35. {  
  36.     int val=a[low];   //此时选取首地址所指向的值赋给即将要确定位置的变量  
  37.     while(low<high)  
  38.     {  
  39.         while(low<high&&a[high]>=val)//从high判断,若大于val则移动,反之则将此时high地址所指向的值  
  40.                                                       //赋给low所指向的值  
  41.           --high;  
  42.         a[low]=a[high];  
  43.         while(low<high&&a[low]<=val)//当赋值完毕后,则从赋值处开始比较,若此时low所指向的值小于val则向前移动,  
  44.                                     //反之,则将此时low地址所指向的值赋给high  
  45.           ++low;  
  46.         a[high]=a[low];  
  47.     }  
  48.     a[low]=val;//此时循环完毕high=low程序已经进行完确定位置,将val的值赋给确定的位置  
  49.     return low;  //当程序循环后,low=high所以也可以是return high;  
  50. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值