zoukankan      html  css  js  c++  java
  • 直接插入排序(Straight Insertion Sort)的C语言实现

    原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia
     
    直接插入排序(Straight Insertion Sort)的基本思想是将新记录插入到已经排好序的有序表中,初始有序表只有无序表的第一个数据,依次对无序表每个数据进行直接插入排序,从而得到了有序表,具体步骤为
    1. 若新记录<有序表高位l.r[j],则设置哨兵
    2. 有序表后移,j+1=j
    3. 重复第2步,直至新纪录>=有序表中的j记录,则j+1就是要插入的位置
    从而得到一个新的、记录数增加1的有序表。
     
    演示实例:
     
     
    C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp)
     
     1 #include <stdio.h>
     2 
     3 typedef float keyType;
     4 typedef struct{
     5     keyType score;
     6     char name[20];
     7 }student;
     8 typedef struct{
     9     int length=6;
    10     student stu[6];
    11 }sqList;
    12 
    13 void SIS(sqList &L){
    14     for(int i=2;i<L.length;i++){
    15         if(L.stu[i].score>L.stu[i-1].score){
    16             L.stu[0]=L.stu[i];//设置哨兵 
    17             int j;
    18             for(j=i-1;L.stu[0].score>L.stu[j].score;j--) 
    19                 L.stu[j+1]=L.stu[j];//记录后移 
    20             L.stu[j+1]=L.stu[0];//找到位置,插入元素 
    21         }
    22     }
    23 }
    24 
    25 int main(){
    26     sqList L;
    27 
    28     for(int i=1;i<L.length;i++){
    29         printf("
    请输入第%d个学生的姓名:",i);
    30         gets(L.stu[i].name);
    31         printf("分数:");
    32         scanf("%f",&(L.stu[i].score));
    33         getchar();
    34     }
    35 
    36     SIS(L);
    37     for(int i=1;i<L.length;i++){
    38         printf("
    学生%s 分数%f 第%d名",L.stu[i].name,L.stu[i].score,i);
    39     }
    40 }
     
  • 相关阅读:
    02-MySQL的安装和管理
    01-pymysql模块的安装
    异常处理
    USACO 2015 Feb Censoring
    玄武密码(bzoj4327)(JSOI2012)
    浅谈AC自动机
    Equation
    JOI五子棋
    浅谈Tarjan
    年轮蛋糕JOI2014Final
  • 原文地址:https://www.cnblogs.com/gangtiexia/p/5097171.html
Copyright © 2011-2022 走看看