排序算法



//这是一个关于快速排序的小程序,快速排序是找一个基准值和数组中其他的元素进行比较,小于他的放到基准值的左边,大于他的放到她的右边。所以程序的关键在于找一个基准值,也就是你找的一个用来和其他元素进行比较的值,我在这里找的是数组最后一个元素,当然找什么元素作为基准值看你个人喜好。找到基准值以后就需要把数组中的元素和他进行比较了,我建立一个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;
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值