• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

直接插入排序(StraightInsertionSort)的C语言实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
原创文章,转载请注明来自钢铁侠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("\n请输入第%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("\n学生%s 分数%f 第%d名",L.stu[i].name,L.stu[i].score,i);
39     }
40 }

 

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap