编写一个程序分别实现冒泡排序和快速排序算法。要求:两种排序算法都不仅要输出最终排序序列,还要输出排

2025年01月07日 06:49
有2个网友回答
网友(1):

下面是我以前写的,希望对你有帮助。
#include
#include
#include
using namespace std;
#define N 100 //产生的数的个数

//冒泡排序

void Bubble_Sort(int R[],int n ){
char flag='0';
cout<<"是否输出所有的数字(1/0):"< cin>>flag;
while(flag>'1'||flag<'0'){
cout<<"输入有误,请重新输入:"< cin>>flag;
}
int i;
if(flag=='1'){
cout<<"排序前:"< for( i=1;i<=n;i++)
cout< cout< }
for(i=1;i int swap=0;
for(int j=1;j<=n-i;j++){

if(R[j] > R[j+1] ){
R[0]=R[j];
R[j]=R[j+1];
R[j+1]=R[0];

swap=1;
}
}
if(swap==0) // 没有发生一次交换,说明序列有序,则跳出循环,排序结束
break;
}
if(flag=='1'){
cout<<"冒泡排序后:"< for(i=1;i<=n;i++)
cout< cout< }

}

//快速排序
int Partition(int R[],int i,int j){ //已R[i]为支点进行划分,算法返回支点记录最终的位置
R[0]=R[i]; //缓存支点记录
while(i while(i=R[0])
j--;

if(i R[i]=R[j];
i++;

}
while(i i++;

if(i R[j]=R[i];
j--;
}
}
R[i]=R[0];

return i;
}
void Quick_Sort(int R[],int s,int t){
int i;
if(s i=Partition(R,s,t); //将表一分为二
Quick_Sort(R,s,i-1); //对支点前端子表递归排序
Quick_Sort(R,i+1,t); //对支点后端子表递归排序
}
}
void Quick(int R[],int n){
char flag='0';
cout<<"是否输出所有的数字(1/0):"< cin>>flag;
while(flag>'1'||flag<'0'){
cout<<"输入有误,请重新输入:"< cin>>flag;
}
int i;
if(flag=='1'){
cout<<"排序前:"< for(i=1;i<=n;i++)
cout< cout< }

Quick_Sort(R,1,n);

if(flag=='1'){
cout<<"快速排序后:"< for(i=1;i<=n;i++)
cout< cout< }
}

int main(){
while(1){
int R[N+1],i;
cout<<"1 在完全随机的情况下对关键码进行排序"< cout<<"2 在完全正序的情况下对关键码进行排序"< cout<<"3 在完全逆序的情况下对关键码进行排序"< cout<<"0 退出"< cout<<"请选择:"< char p;
cin>>p;
while(p-48<0||p-48>3){
cout<<"输入有误,请重新输入:"< cin>>p;
}
if(p-48==0)
break;
if(p-48==1){
srand((unsigned)time(NULL));
for(i=1;i<=N;i++)
R[i]=rand()%10000+1;
}
else if(p-48==2){
for(i=1;i<=N;i++)
R[i]=i;
}
else
for(i=N;i>=1;i--)
R[N-i+1]=i;

char k;
cout<
cout<<"1 冒泡排序"< cout<<"2 快速排序"< cout<<"0 退出"<
cout<<"请选择排序方法:"< cin>>k;
while(k-48<0||k-48>2){
cout<<"输入有误,请重新输入:"< cin>>k;
}
switch(k-48){
case 0:cout<<"谢谢使用!"< case 1:Bubble_Sort(R,N);break;
case 2:Quick(R,N);break;
}
system("pause");system("cls");
}
return 0;
}

网友(2):

利用快速排序算法,目前速度最快的就是这个算法啦!
#include
#define swap(a,b)
void quick(int *a,int s,int t)
{
int i=s,j=t+1;
do
{
do i++;while(a[i]>a[s]);
do j--;while(a[j] if(i }while(i swap(a[s],a[j]);
if(s if(j+1}
void print(int *a,int n)
{
int i;
for(i=0;i printf("%d ",a[i]);
printf("\n");
}
int main()
{
int a[1800],i;
for(i=0;i<1800;i++)
a[i]=2300+i;
quick(a,0,1799);
print(a,10);
return 0;
}

完全满足你的需求! 希望你对有用!