快速排序算法笔记

           快速排序是一种排序算法,对包含n个数的输入数组,最坏情况运行o(n*n),快速排序通常是用于排序的最佳实用选择,这是因为其平均性能相当好:期望的运行时间为o(nlgn)。其中隐含的常数因子很小。另外,它能进行就地排序,在虚存环境中也能很好地工作。(详见算法导论p145)

          对数组v[left......right]进行从小到大快速排序

void qsort(int v[],int left ,int right)
{
  int i,last;
  void swap(int v[],int i, int j);
  if (left>=right)
    return;
  swap(v,left,(left+right)/2);
  last=left;
  for(i=left+1;i<=right;i++)
    if (v[i]<v[left])
      swap(v,++last,i);
  swap(v,left,last);v[j];
  qsort(v,left,last-1);
  qsort(v,last+1,right);
}

void swap(int v[],int i,int j)
{
  int temp;
  temp = v[i];
  v[i] = v[j];
  v[j] = temp;
}

C程序如下



#include <stdio.h>
void swap(int v[],int i,int j)
{
  int temp;
  temp=v[i];
  v[i]=v[j];
  v[j]=temp;
}


int partition(int v[],int left,int right)
{
  int i,j,key;
  int temp;
  key=v[right];
  i=left-1;
  for(j=left;j<right;j++)
    if(v[j]<=key)
    {
      i++;
      swap(v,i,j);
    }
  swap(v,i+1,j);
  return i+1;
}


void qsort(int v[],int left,int right)
{
  int q,length;
  length=sizeof(v)/sizeof(int);
  if(left<right)
  {
    q=partition(v,left,right);
    qsort(v,left,q-1);
    qsort(v,q,right);
  }
}


int main()
{
  int i,v[10];
  printf("Enter number: \n");
  for(i=0;i<10;i++)
    scanf("%d",&v[i]);
    qsort(v,0,9);
    printf("After sort:\n");
    for(i=0;i<10;i++)
    printf("%d ",v[i]);
    printf("\n");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值