排序

快速排序是目前使用较好的排序算法,它是由C.A.Hoare发明并命名的。快速排序基本算法思想:通过一次分割,将无序序列分成两部分,其中前一部分的元素值均不大于后一部分的元素值。然后对每一部分利用同样的方法进行分割,这个过程一直做到每一个子序列的长度小于某个值m为止。   对序列p的分割过程: 首先,在序列的第一个、中间一个及最后一个元素中选取中项,得p(k),然后设置两个指针i和j分别指向序列的起始和最后的位置.Status Quick_Sort(ElemType A[],int left,int right){        tmp=A[(left+right)/2];       do{              while(A[i]<tmp&&i<right) i++;              while(A[j]>tmp&&j>left) j--;              if(i<=j){                     swap(A[i],A[j]);                     i++;                     j--;              }       }while(i<=j);       if(left<j) Quick_Sort(A,left,j);       if(i<right) Quick_Sort(A,i,right);       return 1;}===================================================================插入排序的基本思想是,经过i-1遍处理后,A[0..i-1]己排好序。第i遍处理仅将A[i]插入A[0..i-1]的适当位置,使得A[0..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较A[i]和A[i-1],如果A[i-1]≤ L[i],则A[0..i]已排好序,第i遍处理就结束了;否则交换A[i]与A[i-1]的位置,继续比较A[i-1]和A[i-2],直到找到某一个位置j(0≤j≤i-1),使得L[j] ≤L[j+1]时为止. Status Insertion_Sort(List A){         for(i=1;i<len;i++){                 tmp=A[i];                  j=i-1;                 while(j>=0&&A[j]>tmp){                       A[j+1]=A[j];                       j--;                }                A[++j]=tmp;        }  return 1;}==========================================================================选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将A[i..n]中最小者与A[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。 选择排序算法可实现如下:Status Selection_Sort(List A);         len=ListLength(A);         for(i=0;i<len-1;i++){                 min=i;                 for(j=i+1;j<len;j++)                         if(A[j]<A[min])                                min=j;                if(i!=min){                        swap(A[i],A[min]);                }        }  return 1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值