每天一个小程序(16)——交换排序之快速排序2

来源:互联网 发布:数据恢复装系统 编辑:程序博客网 时间:2024/06/06 11:54

       快速排序,同样的是用递归的算法,不过在Partition函数中用另一种方法,设立两个变量low和high,一个为第一个元素位置,一个为最后一个元素位置,low和high保存在指针量i和j中,将R[low]保存到R[0]中,从R[high]开始向左检查(j--),发现比R[0]小的元素,则将R[high]放到R[low]中,再从low向右检查(i++),发现比R[0]大的元素,则将R[low]放到R[high]中,不断循环,知道两个指针量i<j时,本趟循环结束。


#include <stdio.h>struct datatype1{int key;};typedef int datatype;void Display(datatype A[])  {      for(int i = 1; i < 20; i++)      {          printf("%d ",A[i]);      }  } int Partition(datatype R[], int low, int high){int i,j;i = low;j = high;R[0] = R[low];while(i < j){while((R[j] >= R[0]) &&  (i < j)) //向左检查j--;if(i < j)//若i<j,则说明有小于R[0]的,则交换{R[i] = R[j];i++;}while((R[i] <= R[0]) && (i < j))//向右检查i++;if(i < j)//若i<j,则说明有大于R[0]的,则交换{R[j] = R[i];j--;}R[i] = R[0];}return i;}void Quick_Sort(datatype R[], int low, int high){int i;if(low < high){i = Partition(R, low, high);Quick_Sort(R, low, i - 1);Quick_Sort(R, i + 1, high);}}void main()  {      datatype A[] = {0,4,7,1,13,0,322,92,35,19,3,78,-32,45,77,43,933,8,49,11};      Quick_Sort(A,0,19);      Display(A);  } 


0 0
原创粉丝点击