、实验目的:
(1)能够根据问题描述分析,选择合适的逻辑结构和存储结构,培养学生解决实际应用问题的能力;
(2)掌握三种常用排序算法;
(3)会对不同算法进行综合分析和比较。
二、实验内容:
创建本班的学生名单,并记录本班数据结构课程的成绩,分别使用以下排序方法对此成绩单进行排序:
(1)起泡法对成绩分别进行从高到底和从低到高排序。
(2)折半插入法对成绩分别进行从高到底和从低到高排序。
(3)直接选择排序法对成绩分别进行从高到底和从低到高排序。
代码:
#includestruct { char name[12]; int score; }arr[5000]; int n; void swap(int *a,int *b) { int t = *a; *a = *b; *b = t; } void qipaofa() //冒泡排序法 { printf("选择1,升序,选择2,降序:"); int x; scanf("%d",&x);getchar(); if(x == 1) { for(int i=1;i arr[j+1].score) swap(&arr[j].score,&arr[j+1].score); } } } else if(x == 2 ) { for(int i=1;i arr[j].score) swap(&arr[i].score,&arr[j].score); } } } else if(x == 2) { for(int i=1;i =low;j--) arr[j+1] = arr[j]; arr[low] = arr[0]; } } else { int low = 1,high = 1,mid = 1; for(int i=1;i<=n;i++) { int low = 1,high = i-1,x = arr[i].score; arr[0] = arr[i]; if(x < arr[high].score) low = i; else { while(low < high) { mid = (low + high)/2; if(x >= arr[mid].score ) high = mid; else low = mid + 1; } } printf("%d ",low); for(int j =i-1;j>=low;j--) arr[j+1] = arr[j]; arr[low] = arr[0]; } } printf("n"); } void print() { for(int i=1;i<=n;i++) { printf("%s %dn",arr[i].name,arr[i].score); } } int main() { printf("输入你要排序的人数:"); scanf("%d",&n); getchar(); for(int i=1;i<=n;i++) { printf("请输入每个学生的姓名和数据结构的分数:"); scanf("%s %d",arr[i].name,&arr[i].score); getchar(); } //需要哪个便解开那个 //qipaofa(); //zhijie(); //zheban(); //print(); return 0; }



