一、实验内容
1、输入2-10个不为零的正整数,遇到0,代表输入结束。
2、数字选择排序方法,1-冒泡排序、2-插入排序、3-基数排序。
3、使用所选排序方法的排序,结果输出所用方法以及结果,每个数之间用“,”隔开,中间不要有空格。
//============================================================================
// Name : test02_201100300097.cpp
// Author : ZhengDujin
// Created on : 2012-10-27
// Copyright : Your copyright notice
// Compiler : MinGCC
// Language : C/C++
// Description : test02_201100300097 in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
void BubbleSort(int *a,int len){
//冒泡排序
int i,j,temp;
for(i=0;i<len-1;i++){
for(j=len-1;j>i;j--){
if(a[j-1]>a[j]){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<len;i++){
if(i!=len-1)
cout<<a[i]<<",";
else
cout<<a[i];
}
}
void InsertionSort(int *a,int len){
//插入排序
int i,j,t;
for(i=1;i<len;i++){
t=a[i];
j=i-1;
while(j>=0&&t<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
for(i=0;i<len;i++){
if(i!=len-1)
cout<<a[i]<<",";
else
cout<<a[i];
}
}
int maxbit(int data[],int n){
int d=1;
for(int i=0;i<n;i++){
int c=1;
int p=data[i];
while(p/10){
p=p/10;
c++;
}
if(c>d)
d=c;
}
return d;
}
void RadixSort(int data[],int n){
//基数排序
int tmp[n];
int count[n];
int d=maxbit(data,n);
int r=1;
for(int j=0;j<d;j++){
for(int i=0;i<10;i++)
count[i]=0;
for(int i=0;i<n;i++){
int k=data[i]/r;
int q=k%10;
count[q]++;
}
for(int i=1;i<10;i++){
count[i]+=count[i-1];
}
for(int j=n-1;j>=0;j--){
int p=data[j]/r;
int s=p%10;
tmp[count[s]-1]=data[j];
count[s]--;
}
for(int i=0;i<n;i++){
data[i]=tmp[i];
}
r=r*10;
}
for(int i=0;i<n;i++){
if(i!=n-1)
cout<<data[i]<<",";
else
cout<<data[i];
}
}
int main(){
int num=10,temp,choice,size=10;
int tlist[num];
cout<<"Input"<<endl;
for(int i=0;i<=num-1;i++){
cin>>temp;
if(temp==0){
size=i;
break;
}
tlist[i]=temp;
}
int list[size];
for(int i=0;i<=size-1;i++){
list[i]=tlist[i];
}
cout<<"1-冒泡排序,2-插入排序,3-基数排序"<<endl;
cin>>choice;
cout<<"Output"<<endl;
if(choice==1){
cout<<"冒泡排序"<<endl;
BubbleSort(list,size);
}
if(choice==2){
cout<<"插入排序"<<endl;
InsertionSort(list,size);
}
if(choice==3){
cout<<"基数排序"<<endl;
RadixSort(list,size);
}
cout<<endl;
cout<<"End"<<endl;
return 0;
}