实验二 排序算法
一、实验目的
掌握各种排序方法的实现思想。
二、 实验内容
1、输入 2-20 个不为零的正整数,遇到 0 代表输入结束,0 不参与排序。
2、数字选择排序方法,1-冒泡排序,2-插入排序,3-基数排序
3、基数排序能够仅仅实现小于 10 的正整数的排序。有大于 9 的输入时, 直接输出 0。
4、使用所选排序方法的排序,结果输出所用方法以及结果,每个数之间 用“,”隔开,中间不要有空格。
5、输入输出请严格按下面要求的格式实现,不能少任何一行文字。
代码如下:
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
using namespace std;
void swap(int &a,int & b){
int t=a;
a=b;
b=t;
}
void bubble(int a[],int n){//冒泡排序方法
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]) swap(a[j],a[j+1]);
}
}
for(int i=0;i<n-1;i++)cout<<a[i]<<",";
cout<<a[n-1]<<endl;
}
void insert(int a[],int n){//插入排序方法
for(int i=1;i<n;i++){
int t=a[i];
for(int j=i-1;j>=0;j--){
if(t<a[j]){
a[j+1]=a[j];
if(j==0) a[0]=t;
}
else{
a[j+1]=t;
break;
}
}
}
for(int i=0;i<n-1;i++)cout<<a[i]<<",";
cout<<a[n-1]<<endl;
}
void radix(int a[],int n){//基数排序方法
int b[]={0,0,0,0,0,0,0,0,0,0};
int index=0;
for(int i=0;i<n;i++){
if(a[i]>=10)a[i]=0;
b[a[i]%10]++;
}
for(int i=0;i<10;i++){
if(b[i])
for(int j=0;j<b[i];j++)a[index++]=i;
}
for(int i=0;i<index-1;i++)cout<<a[i]<<",";
cout<<a[index-1]<<endl;
}
int main(){
int n;
int a[25];
cout<<"Input"<<endl;
for(n=0;cin>>a[n]&&a[n]!=0;n++);
cout<<"1-冒泡排序,2-插入排序,3-基数排序"<<endl;
int choice;cin>>choice;
cout<<"Output"<<endl;
if(choice==1){
cout<<"冒泡排序"<<endl;
bubble(a,n);
}
else if(choice==2){
cout<<"插入排序"<<endl;
insert(a,n);
}
else if(choice==3){
cout<<"基数排序"<<endl;
radix(a,n);
}
cout<<"End"<<endl;
return 0;
}
结论分析与体会:
温习了各个排序方法的代码,加深了对冒泡排序、插入排序和基数排序原理的理解。
来源:CSDN
作者:无敌阿晨
链接:https://blog.csdn.net/weixin_43959421/article/details/103973780