概述
1、数组排序代码
#include<stdio.h>
//直接插入排序,边比较边移动元素,最后插入元素
void InsertSort(int array[],int len){
int i,j;
for(i=1;i<len;i++){//从二个元素开始向前插
int temp=array[i];//标记当前选择插入的元素
for(j=i;j>0 && array[j-1]>temp;j--){
array[j]=array[j-1];//后移元素
}
array[j]=temp;//插入标记的元素
}
}
//测试
int main(){
int array[]={13,34,78,125,75,32,0,1,9,243};
int len=(int)sizeof(array)/sizeof(*array);//求数组长度
int i;
printf("排序前的数组为:n");
for(i=1;i<6;i++){
printf("%-4d",array[i]);
}
printf("n直接插入排序后的数组为:n");
InsertSort(array,6);
for(i=1;i<6;i++){
printf("%-4d",array[i]);
}
}
实验结果
2、应用:学生成绩排名
#include<stdio.h>
#define Size 4//姓名数组长度
#define Len 6//数组结构体个数(即学生个数-1)
typedef struct{
int key;
char info[Size];
}DataStruct;
//直接插入算法
void InsertSort(DataStruct ds[],int len){
//方法一
int i,j;
for(i=2;i<len;i++){//从第二个元素开始,逐个向前插入元素(ds[0]未存放数据)
ds[0]=ds[i];//第一个结构体ds[0]存放当前选择要插入的结构体信息
for(j=i-1;ds[j].key>ds[0].key;j--){//j不会越界,不用判断j>0,j=0时自动跳出循环
ds[j+1]=ds[j];//元素后移
}
ds[j+1]=ds[0];//插入标记元素
}
// //方法二 (两种移动元素方式)
// int i,j;
// for(i=2;i<len;i++){//从第二个元素开始,逐个向前插入元素(ds[0]未存放数据)
// ds[0]=ds[i];//第一个结构体ds[0]存放当前选择要插入的结构体信息
// for(j=i;ds[j-1].key>ds[0].key;j--){//j不会越界,不用判断j>0,j=0时自动跳出循环
// ds[j]=ds[j-1];//元素后移
// }
// ds[j]=ds[0];//插入标记元素
// }
}
int main(){
DataStruct ds[Len];
int i;
for(i=1;i<Len;i++){//第一个ds[0]不存放学生信息
printf("请输入第%d个同学的姓名:n",i);
gets(ds[i].info);
printf("请输入第%d同学的成绩:n",i);
scanf("%d",&ds[i].key);
getchar();//吸收回车字符
}
InsertSort(ds,Len);
for(i=1;i<Len;i++){
printf("n第%d名 姓名:%s 成绩:%dn",Len-1-i,ds[i].info,ds[i].key);
}
}
实验结果
最后
以上就是暴躁大神为你收集整理的排序:直接插入算法的实现的全部内容,希望文章能够帮你解决排序:直接插入算法的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复