山东大学数据结构实验二:排序算法
山东大学软件学院数据结构实验二:排序算法
实验步骤与内容:
实验内容
即实现冒泡排序、插入排序和基数排序。要求如下:
①最多接受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;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)