排序算法

来源:互联网 发布:股票同花顺软件下载 编辑:程序博客网 时间:2024/05/24 05:05


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

原创粉丝点击