实验目的:
掌握三种排序方法的实现思想。
实验内容
1、 最多接受20个不为零的正整数进行排序,如果中间输入0则代表提前结束输入,0之前输入几个数就用几个数参与排序,0不参与排序。
2、 数字选择排序方法,1-Bubble Sort,2-Insert Sort,3-Radix Sort(注意大小写要区分)。
3、 基数排序能够仅仅实现小于10的正整数的排序。如果输入的数据有大于9数据,基数排序不再排序,直接输出一个0后结束程序。
4、 使用所选排序方法的排序,结果输出所用方法以及结果,每个数之间用“,”隔开,中间不要有空格。
5、 输入输出请严格按下面要求的格式实现,不能少任何一行文字。
#include <iostream>
using namespace std;
void bubble(int *a,int n){
for(int i=0;i<n;i++){
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
cout << "Bubble Sort" << endl;
for(int k=0;k<n-1;k++){
cout << a[k] << ",";
}
cout << a[n-1] <<endl;
return;
}
void insert(int *a,int n){
for (int i = 1; i < n; i++)
{
for (int j = i - 1; j >= 0 && a[j + 1] < a[j]; j--)
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
cout << "Insert Sort" << endl;
for(int k=0;k<n-1;k++){
cout << a[k] << ",";
}
cout << a[n-1] <<endl;
return;
}
void radix(int *a,int n){
for(int i=0;i<n;i++){
if(a[i]>9){
cout << "Radix Sort" << endl;
cout << 0 << endl;
return;
}
}
int array[9][20];
int count[9];
for(int b=0;b<9;b++){
count[b]=0;
}
for(int i=0;i<n;i++){
switch(a[i]) {
case 1 :
array[0][count[0]++]=a[i];
break;
case 2 :
array[1][count[1]++]=a[i];
break;
case 3 :
array[2][count[2]++]=a[i];
break;
case 4 :
array[3][count[3]++]=a[i];
break;
case 5 :
array[4][count[4]++]=a[i];
break;
case 6 :
array[5][count[5]++]=a[i];
break;
case 7 :
array[6][count[6]++]=a[i];
break;
case 8 :
array[7][count[7]++]=a[i];
break;
case 9 :
array[8][count[8]++]=a[i];
break;
default :
;
}
}int number=0;
for(int j=0;j<9;j++){
if(count[j]!=0){
for(int k=0;k<count[j];k++)
a[number++]=array[j][k];
}
}
cout << "Radix Sort" << endl;
for(int c=0;c<n-1;c++){
cout << a[c] << ",";
}
cout << a[n-1] <<endl;
return;
}
int main(){
int array[20];
int element;
int count=0;
cout << "Input" << endl;
cin >> element;
while(element!=0){
array[count++]=element;
if(count==20)
break;
cin >> element;
}
cout << "1-Bubble Sort,2-Insert Sort,3-Radix Sort" << endl;
int flag;
cin >> flag;
cout << "Output" << endl;
switch(flag){
case 1:
bubble(array,count);
break;
case 2:
insert(array,count);
break;
case 3:
radix(array,count);
}
cout << "End0" << endl;
system("pause");
return 0;
}