您的位置:首页 > 移动开发 > 微信开发

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

2014-04-01 12:36 218 查看
快速排序,同样的是用递归的算法,不过在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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: