6-1 编写一个选择排序函数,实现升序排序功能。
分数 10
全屏浏览题目
切换布局
作者 王和兴
单位 东北大学秦皇岛分校
编写一个选择排序函数,实现升序排序功能。
函数接口定义:
void select_sort(int array[], int n);
其中array是待排序的数组名,n为数据array中元素的个数。
裁判测试程序样例:
#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
void select_sort(int array[], int n)
{
for(int i=0;i<=n-2;i++)
{
for(int j=i+1;j<=n-1;j++)
if(array[i]>array[j])
{
int t=array[i];
array[i]=array[j];
array[j]=t;
}
}
}
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
输出样例:
n=5
第1趟:99 85 73 64 92
第2趟:99 92 73 64 85
第3趟:99 92 85 64 73
第4趟:99 92 85 73 64
After sort: 99 92 85 73 64
void DataSort(int score[], int n)
{
int i=0;int max,temp;
for(i=0;i<n-1;i++)
{ max=i;
for( int j=i+1;j<n;j++)
{
if(score[j]>score[max])
{
max=j;
}
}
temp = score[max];
score[max] = score[i];
score[i] = temp;
printf("第%d趟:",i+1);
PrintScore(score, n);
}
}
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; } /* 你的代码将被嵌在这里 */
输入样例:
4
5 1 7 6
输出样例:
After sorted the array is: 1 5 6 7
void sort( int a[], int n )
{
for(int i=0;i<=n-2;i++)
{
for(int j=i+1;j<=n-1;j++)
if(a[i]>a[j])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
7-1 选择法排序
分数 15
全屏浏览题目
切换布局
作者 C课程组
单位 浙江大学
本题要求将给定的n个整数从大到小排序后输出。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
4
5 1 7 6
输出样例:
7 6 5 1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<=n-2;i++)
{
for(int j=i+1;j<=n-1;j++)
if(a[i]<a[j])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(int i=0;i<n;i++)
{
cout<<a[i];
if(i<n-1)
{
cout<<" ";
}
}
return 0;
}
7-2 选择排序
分数 15
全屏浏览题目
切换布局
作者 魏峻
单位 陕西理工大学
选择排序
,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
输入格式:
输入在第1行中给出N(1<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔,并保证数字没有重复的出现。
输出格式:
给出选择排序每一遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。注意:当排序完成时应立即停止
。
输入样例1:
7
4 5 7 6 3 2 1
输出样例1:
1 5 7 6 3 2 4
1 2 7 6 3 5 4
1 2 3 6 7 5 4
1 2 3 4 7 5 6
1 2 3 4 5 7 6
1 2 3 4 5 6 7
输入样例2:
5
1 2 3 5 4
输出样例2:
1 2 3 4 5
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<=n-2;i++)
{
int flag=0;
int min=i;
for(int j=i+1;j<=n-1;j++)
{
if(a[min]>a[j])
{
flag=1;
min=j;
}
}
int temp = a[min];
a[min] = a[i];
a[i] = temp;
if(flag==1)
{
for(int k=0;k<n;k++)
{
cout<<a[k];
if(k<=n-2)
{
cout<<" ";
}
}
if(i<n-2)
{
cout<<endl;
}
}
}
return 0;
}
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遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。
输入样例:
在这里给出一组输入。例如:
6 2
2 3 5 1 6 4
输出样例:
在这里给出相应的输出。例如:
1 2 5 3 6 4
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n-1;i++)
{
int min=i;
for(int j=i+1;j<n;j++)
{
if(a[min]>a[j])
{
min=j;
}
}
int temp=a[min];
a[min]=a[i];
a[i]=temp;
if(i==k-1)
{
for(int p=0;p<n;p++)
{
cout<<a[p];
if(p<n-1)
{
cout<<" ";
}
}
}
}
cout<<endl;
return 0;
}