实验步骤与内容:

实验内容

即实现冒泡排序、插入排序和基数排序。要求如下:

①最多接受20个不为零的正整数进行排序,如果中间输入0则代表提前结束输入,0之前输入几个数就用几个数参与排序,0不参与排序。

②数字选择排序方法,1-Bubble Sort,2-Insert Sort,3-Radix Sort(注意大小写要区分)。

③基数排序能够仅仅实现小于10的正整数的排序。如果输入的数据有大于9数据,基数排序不再排序,直接输出一个0后结束程序。

实验步骤

Ⅰ编写冒泡排序:

冒泡排序分为两层循环,外层循环的目的是每循环一次,就完成一个元素的固位,即可以将最大元素筛选出来,放到要求排序数组的最后。而第二层循环就是要筛选出最大的元素,筛选方式为,通过遍历,依次将相邻的两个元素比较大小,把当前最大的元素放在后边,如此遍历后,就可以把当前最大的元素放到遍历的最后一位。

Ⅱ编写插入排序:

插入排序也是两层循环,外层循环从前往后,初始确定已排序的元素为1个,放在待排序数组的最前端,每次循环都多增加1个已排序的元素。第二层循环就是将待排序的元素的首位元素,从后往前依次与已排序的元素比较,放到合适的位置。

Ⅲ编写基数排序:

基数排序就是用数组模拟出箱子排序。给出基数为1-9的九个箱子,程序中用线性表实现,对应位置中初始化数据为0,代表数据i+1的个数。然后将待排序元素依次放到对应的箱子中,最后从小到大依次输出箱子中的数据,直到每个箱子中的数据都为0。这里编程实现的难点在于如何确定输出的最后一个数据,因为要求输出格式中最后一个数据后没有“,”。我通过辅助变量checkcount和布尔变量flag的方式,记录已输出元素个数,等checkcount=count-1的时候flag变为false,及时退出循环。

运行结果样例展示:

 源代码:

#include<bits/stdc++.h>
using namespace std;


void BubbleSortPrint(int *input,int right)
{
	cout<<"Bubble Sort"<<endl;
	for(int i=0;i<right-1;i++)
	{
		for(int j=0;j<right-i-1;j++){
			if(input[j]>input[j+1]){
				int temp = input[j];
				input[j] = input[j+1];
				input[j+1] = temp;
			}	
		}
	}
	for(int i=0;i<right-1;i++){
		cout<<input[i]<<",";
	}
	cout<<input[right-1]<<endl;
}

void InsertSortPrint(int *input,int right)
{
	cout<<"Insert Sort"<<endl;
	for(int i=0;i<right;i++)
	{
		int temp = input[i];int j;
		for(j=i-1;j>=0 && temp<input[j];j--)
		{
			input[j+1] = input[j];
		}
		input[j+1] = temp;
	}
	for(int i=0;i<right-1;i++){
		cout<<input[i]<<",";
	}
	cout<<input[right-1]<<endl;
}

void RadixSortPrint(int *input,int right)
{
	cout<<"Radix Sort"<<endl;
	int ans[9];
	for(int i=0;i<9;i++){
		ans[i] = 0;
	}
	bool flag = true;
	int count=0;
	for(int i=0;i<right;i++){
		if(input[i]>=10){
			cout<<"0"<<endl;
			flag = false;
			break;
		}
		else{
			count++;
			ans[input[i]-1]++;
		}
	}
	if(flag){
		int countcheck=0;
	for(int i=0;i<9;i++){
		while(ans[i]!=0){
			if(countcheck==count-1){
			cout<<i+1<<endl;
			flag = false;
			break;
		}
			else{
			cout<<i+1<<",";
			countcheck++;
			ans[i]--;
			}
		}
		if(flag == false){
			break;
		}
	}
}
}
int main(){
	cout<<"Input"<<endl;
	int count = 0;int inputint;int input[21];
	while(count<20 && cin>>inputint && inputint != 0 ){
		input[count++] = inputint;
	}
	cout<<"1-Bubble Sort,2-Insert Sort,3-Radix Sort"<<endl;
	cin>>inputint;
	cout<<"Output"<<endl;
	switch(inputint){
		case 1:
			BubbleSortPrint(input,count);
			break;
		case 2:
			InsertSortPrint(input,count);
			break;
		case 3:
			RadixSortPrint(input,count);
			break;	
		default :
			break;
	}
	cout<<"End0";
	return 0;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐