裁判测试程序样例:
#include <iostream> using namespace std; int main() { void select_sort(int array[],int n); int a[10]={6,3,1,4,0,9,8,2,5,7},i; select_sort(a,10); for(i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl; return 0; } /* 你的代码将被嵌在这里 */
输出样例:
0 1 2 3 4 5 6 7 8 9
1. void select_sort(int array[], int n) 2. { 3. for(int i=0;i<=n-2;i++) 4. { 5. for(int j=i+1;j<=n-1;j++) 6. if(array[i]>array[j]) 7. { 8. int t=array[i]; 9. array[i]=array[j]; 10. array[j]=t; 11. } 12. } 13. }
6-2 选择排序
分数 10
全屏浏览题目
切换布局
作者 王群芳
单位 合肥师范学院
题目描述
从键盘输入某班学生某门课程的成绩(每班人数最多不超过40人),当输入为负值时,表示输入结束。本题要求实现用选择排序
法将分数从高到低
排序(并输出每趟排序结果)的函数。
函数接口定义:
void DataSort(int score[], int n);
其中 score
是用户传入的学生成绩数组, n
是学生人数。
裁判测试程序样例:
#include <stdio.h> #define N 40 int ReadScore(int score[]); void DataSort(int score[], int n); void PrintScore(int score[], int n); int main() { int score[N], n; n = ReadScore(score); printf("n=%d\n", n); if(n) { DataSort(score, n); printf("After sort: "); PrintScore(score, n); } return 0; } int ReadScore(int score[]) { int i = -1; do{ i++; scanf("%d", &score[i]); }while (score[i] >= 0); return i; } /* 请在这里填写答案 */ void PrintScore(int score[], int n) { int i; for (i=0; i<n; i++) { if (i!=0) printf(" "); printf("%d", score[i]); } printf("\n"); }
输入样例:
64 85 73 99 92 -1
输出样例:
1. n=5 2. 第1趟:99 85 73 64 92 3. 第2趟:99 92 73 64 85 4. 第3趟:99 92 85 64 73 5. 第4趟:99 92 85 73 64 6. After sort: 99 92 85 73 64
1. void DataSort(int score[], int n) 2. { 3. int i=0;int max,temp; 4. for(i=0;i<n-1;i++) 5. { max=i; 6. for( int j=i+1;j<n;j++) 7. { 8. if(score[j]>score[max]) 9. { 10. max=j; 11. } 12. } 13. temp = score[max]; 14. score[max] = score[i]; 15. score[i] = temp; 16. printf("第%d趟:",i+1); 17. PrintScore(score, n); 18. } 19. }
6-3 使用函数的选择法排序
分数 10
全屏浏览题目
切换布局
作者 张泳
单位 浙大城市学院
本题要求实现一个用选择法对整数数组进行简单排序的函数。
函数接口定义:
void sort( int a[], int n );
其中a
是待排序的数组,n
是数组a
中元素的个数。该函数用选择法将数组a
中的元素按升序排列,结果仍然在数组a
中。
裁判测试程序样例:
#include <stdio.h> #define MAXN 10 void sort( int a[], int n ); int main() { int i, n; int a[MAXN]; scanf("%d", &n); for( i=0; i<n; i++ ) scanf("%d", &a[i]); sort(a, n); printf("After sorted the array is:"); for( i = 0; i < n; i++ ) printf(" %d", a[i]); printf("\n"); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
1. 4 2. 5 1 7 6
输出样例:
After sorted the array is: 1 5 6 7
1. void sort( int a[], int n ) 2. { 3. for(int i=0;i<=n-2;i++) 4. { 5. for(int j=i+1;j<=n-1;j++) 6. if(a[i]>a[j]) 7. { 8. int t=a[i]; 9. a[i]=a[j]; 10. a[j]=t; 11. } 12. } 13. }
7-1 选择法排序
分数 15
全屏浏览题目
切换布局
作者 C课程组
单位 浙江大学
本题要求将给定的n个整数从大到小排序后输出。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
1. 4 2. 5 1 7 6
输出样例:
7 6 5 1
1. #include<bits/stdc++.h> 2. using namespace std; 3. int main() 4. { 5. int n; 6. cin>>n; 7. int a[n]; 8. for(int i=0;i<n;i++) 9. { 10. cin>>a[i]; 11. } 12. for(int i=0;i<=n-2;i++) 13. { 14. for(int j=i+1;j<=n-1;j++) 15. if(a[i]<a[j]) 16. { 17. int t=a[i]; 18. a[i]=a[j]; 19. a[j]=t; 20. } 21. } 22. for(int i=0;i<n;i++) 23. { 24. cout<<a[i]; 25. if(i<n-1) 26. { 27. cout<<" "; 28. } 29. } 30. return 0; 31. }
7-2 选择排序
分数 15
全屏浏览题目
切换布局
作者 魏峻
单位 陕西理工大学
选择排序
,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
输入格式:
输入在第1行中给出N(1<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔,并保证数字没有重复的出现。
输出格式:
给出选择排序每一遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。注意:当排序完成时应立即停止
。
输入样例1:
1. 7 2. 4 5 7 6 3 2 1
输出样例1:
1. 1 5 7 6 3 2 4 2. 1 2 7 6 3 5 4 3. 1 2 3 6 7 5 4 4. 1 2 3 4 7 5 6 5. 1 2 3 4 5 7 6 6. 1 2 3 4 5 6 7
输入样例2:
1. 5 2. 1 2 3 5 4
输出样例2:
1 2 3 4 5
1. #include<bits/stdc++.h> 2. using namespace std; 3. int main() 4. { 5. int n; 6. cin>>n; 7. int a[n]; 8. for(int i=0;i<n;i++) 9. { 10. cin>>a[i]; 11. } 12. for(int i=0;i<=n-2;i++) 13. { 14. int flag=0; 15. int min=i; 16. for(int j=i+1;j<=n-1;j++) 17. { 18. if(a[min]>a[j]) 19. { 20. flag=1; 21. min=j; 22. } 23. } 24. int temp = a[min]; 25. a[min] = a[i]; 26. a[i] = temp; 27. if(flag==1) 28. { 29. for(int k=0;k<n;k++) 30. { 31. cout<<a[k]; 32. if(k<=n-2) 33. { 34. cout<<" "; 35. } 36. } 37. if(i<n-2) 38. { 39. cout<<endl; 40. } 41. } 42. } 43. return 0; 44. }
7-3 第k轮选择法排序
分数 20
全屏浏览题目
切换布局
作者 lty
单位 浙江大学
众所周知,ln是一个dalao,lty是一个five,现在lty问ln,你能将n个数字进行选择法排序使其从小到大有序吗?ln觉得这个问题很简单,然后就反问lty,你能在这个的基础上,输出进行k轮选择法排序的结果吗?lty是个弱鸡,当然不会,于是向你请教这个问题,你能替lty解决这个问题吗? 给你n个数字,输出将这n个数字经过k轮选择法排序后的结果。
选择法排序:遍历整个数组,第一轮遍历第1位到第n位,找到最小的与第1位交换,第二轮遍历第2位到第n位,找到最小的与第2位交换,以此类推。(每轮只交换一次)
输入格式:
输入在第1行中给出N和K(1 ≤ K < N ≤ 100),在第2行中给出N个待排序的正整数,数字间以空格分隔。
输出格式:
在一行中输出选择法排序扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。
输入样例:
在这里给出一组输入。例如:
1. 6 2 2. 2 3 5 1 6 4
输出样例:
在这里给出相应的输出。例如:
1 2 5 3 6 4
1. #include<bits/stdc++.h> 2. using namespace std; 3. int main() 4. { 5. int n,k; 6. cin>>n>>k; 7. int a[n]; 8. for(int i=0;i<n;i++) 9. { 10. cin>>a[i]; 11. } 12. for(int i=0;i<n-1;i++) 13. { 14. int min=i; 15. for(int j=i+1;j<n;j++) 16. { 17. if(a[min]>a[j]) 18. { 19. min=j; 20. } 21. } 22. int temp=a[min]; 23. a[min]=a[i]; 24. a[i]=temp; 25. if(i==k-1) 26. { 27. for(int p=0;p<n;p++) 28. { 29. cout<<a[p]; 30. if(p<n-1) 31. { 32. cout<<" "; 33. } 34. } 35. } 36. } 37. cout<<endl; 38. return 0; 39. }