这里要注意的是相等的元素不再交换,还有注意用两个数组,因为对一组数组用冒泡排完后他已经是有序的了,再用快速排序计算交换次数就不是原来的数据了(低级错误)。
代码如下:
#include <stdio.h>
int t;
int a[1000],b[1000];
void QuickSort(int low,int high){/*快排函数*/
if(low<high){
int p=Partition(low,high);
QuickSort(low,p-1);
QuickSort(p+1,high);
}
}
int Partition(int low,int high){/*一趟快排函数*/
int p,d;
p=b[low];
while(low<high){
while(low<high&&p<=b[high])
high--;
d=b[high];
b[high]=b[low];
b[low]=d;
if(low!=high){
t++;
}
while(low<high&&p>=b[low])
low++;
d=b[low];
b[low]=b[high];
b[high]=d;
if(low!=high)
t++;
}
return low;
}
int main(){
int n,i,j,d;
while(scanf("%d",&n)!=EOF){
int k,m;
t=0;
k=0;
m=n;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
b[i]=a[i];
QuickSort(0,m-1);
for(i=0;i<n;i++){/*冒泡排序*/
for(j=i+1;j<n;j++){
if(a[i]>a[j]){
d=a[i];
a[i]=a[j];
a[j]=d;
k++;
}
}
}
printf("%d %d\n",k,t);
}
return 0;
}

本文通过使用两个数组分别进行冒泡排序和快速排序的方法,对比两种排序算法在相同数据集上的交换次数,旨在深入理解这两种经典排序算法的效率差异。
410

被折叠的 条评论
为什么被折叠?



