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 }

    分析如下:



  • 相关阅读:
    DBCC修复不同情况下的损坏
    Python单例模式的4种实现方法
    osx 安装redis
    tornado系列文章
    Python中__init__和__new__的区别详解
    Tornado源码分析之http服务器篇
    tornado.ioloop.IOLoop相关文章
    How to use POST method in Tornado?
    https://github.com/diogobaeder/pycket
    Frequently Asked Questions
  • 原文地址:https://www.cnblogs.com/youxin/p/2337374.html
Copyright © 2011-2022 走看看