• 二路插入排序详解


      二路插入排序设置两个变量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 }

    分析如下:



  • 相关阅读:
    return break continue
    Web 前端攻防(2014版)
    mysql语句
    MD5加密
    array_pop()将数组最后一个单元弹出(出栈)
    定义一个求和函数
    机器学习:偏差方差权衡(Bias Variance Trade off)
    机器学习:验证数据集与交叉验证
    机器学习:学习曲线
    机器学习:过拟合与欠拟合
  • 原文地址:https://www.cnblogs.com/youxin/p/2337374.html
Copyright © 2020-2023  润新知