//这是一个关于快速排序的小程序,快速排序是找一个基准值和数组中其他的元素进行比较,小于他的放到基准值的左边,大于他的放到她的右边。所以程序的关键在于找一个基准值,也就是你找的一个用来和其他元素进行比较的值,我在这里找的是数组最后一个元素,当然找什么元素作为基准值看你个人喜好。找到基准值以后就需要把数组中的元素和他进行比较了,我建立一个partition()函数来进行进行分区操作,找基准值下标 。看下面这个循环语句
for(i=left;i<right;i++)
{
if(a[i]<pivot)
{
swap(a,i,index);
index++;
}
}
这里交换的 i 和 index 的位置,使用index来存储交换后的位置,i来遍历数组元素。
//分区操作,返回基准值的下标
int partition(int *a,int left,int right)
{
int pivot = a[right];
int index = left; //如果找到一个比基准小的元素,与下标为index的元素交换位置
int i;
for(i=left;i<right;i++)
{
if(a[i]<pivot)
{
swap(a,i,index);
index++;
}
}
swap(a,index,right);
return index; //基准值所在位置下标
}
//快速排序
void qsort(int *a,int left,int right)
{
if(left<right)
{
int pivot=partition(a,left,right); //进行分区操作,找基准值下标
qsort(a,left,pivot-1); //对左边部分进行快速排序
qsort(a,pivot+1,right); //对右边部分进行快速排序
}
}
int main()
{
int a[size] = {9,8,0,3,1,2,4,7,5};
int len = sizeof(a)/sizeof(a[0]);
qsort(a,0,len-1);
printA(a,len);
return 0;
}