zoukankan      html  css  js  c++  java
  • 二路插入排序详解

      二路插入排序设置两个变量first,final,把第一个数当成pivot,比它小则往前插,越小越往前插;比它大就往后插,

    越大越往后插,源码如下:

     1 #include <stdio.h>
    2 #define MAXSIZE 100
    3
    4 typedef int elemtype;
    5
    6 void BiInsertsort(elemtype buffer[],int length){
    7 elemtype tmp[MAXSIZE+1];
    8 int first,final,med;
    9 int i,j;
    10 tmp[1]=buffer[1];
    11 first=2;final=MAXSIZE; //first,final分别指向待插入的位置.first在前,final在后
    12 med=1; //作为中轴
    13 for(i=2;i<=length;i++){
    14 if(buffer[i]<tmp[med]){ //插前部,最小的在first
    15 for(j=first;j-1>med&&buffer[i]>tmp[j-1];j--) tmp[j]=tmp[j-1];
    16 tmp[j]=buffer[i];
    17 first++;
    18 }
    19 else { //插后部
    20 for(j=final;j+1<=MAXSIZE&&buffer[i]<tmp[j+1];j++) tmp[j]=tmp[j+1]; //最大的在final
    21 tmp[j]=buffer[i];
    22 final--;
    23 }
    24 }//for
    25 for(i=first-1,j=1;i>0;i--) buffer[j++]=tmp[i];
    26 for(i=MAXSIZE;i>final;i--) buffer[j++]=tmp[i];
    27 }
    28
    29 void main(){
    30 int i=0;
    31 int j=0;
    32 elemtype buffer[MAXSIZE+1];
    33 puts("Input the number,and finish with any char:");
    34 while(scanf("%d",&buffer[++i])); //i比元素个数多1 MARK!!!
    35 BiInsertsort(buffer,i-1); //0号单元未使用
    36 for(j=1;j<i;j++) printf("%d ",buffer[j]);
    37 }

    分析如下:



  • 相关阅读:
    CF1082E Increasing Frequency
    CF1083B The Fair Nut and String
    week2
    CF1082G Petya and Graph
    后缀数组学习笔记
    单纯形法
    验证rbd的缓存是否开启
    如何删除一台OSD主机
    Mon失效处理方法
    查询osd上的pg数
  • 原文地址:https://www.cnblogs.com/youxin/p/2337374.html
Copyright © 2011-2022 走看看