山东大学《数据结构》实验二:排序算法

实验二 排序算法

一、实验目的

掌握各种排序方法的实现思想。

二、 实验内容

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;
}

结论分析与体会:

温习了各个排序方法的代码,加深了对冒泡排序、插入排序和基数排序原理的理解。
发布了11 篇原创文章 · 获赞 0 · 访问量 37

猜你喜欢

转载自blog.csdn.net/weixin_43959421/article/details/103973780