快速排序的效率较冒泡排序的较高
我也不是真的非常理解,我就把我的想法写下来吧。
下面是代码,我会根据我的理解进行注释~
#include<stdio.h>
int a[101],n;
int quicksort(int left ,int right)
{
int i,j,t,temp;
temp=a[left];//将最左边的作为基准数
i=left;
j=right;
if(left>right)
return ;
while(i!=j)
{
while(a[j]>=temp&&i<j)//先从右往左进行,
j--;//找到一个后j--,再从左往右进行
while(a[i]<=temp&&i<j)
i++;
if(i<j)//把两个数进行交换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;//把第i个数与第一个交换
quicksort(left,i-1);
quicksort(i+1,right);//递归思想
return ;
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);//调用函数quicksort()
for(i=1;i<=n;i++)
printf("%d ",a[i]);
getchar();getchar();//暂停程序
return 0;
}
//a[left]=a[i];
a[i]=temp;//把基准数归位
我也不是真的非常理解,我就把我的想法写下来吧。
下面是代码,我会根据我的理解进行注释~
#include<stdio.h>
int a[101],n;
int quicksort(int left ,int right)
{
int i,j,t,temp;
temp=a[left];//将最左边的作为基准数
i=left;
j=right;
if(left>right)
return ;
while(i!=j)
{
while(a[j]>=temp&&i<j)//先从右往左进行,
j--;//找到一个后j--,再从左往右进行
while(a[i]<=temp&&i<j)
i++;
if(i<j)//把两个数进行交换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;//把第i个数与第一个交换
quicksort(left,i-1);
quicksort(i+1,right);//递归思想
return ;
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);//调用函数quicksort()
for(i=1;i<=n;i++)
printf("%d ",a[i]);
getchar();getchar();//暂停程序
return 0;
}
//a[left]=a[i];
a[i]=temp;//把基准数归位
本文详细解析了快速排序与冒泡排序的工作原理、实现代码,并通过实例比较了两者在不同场景下的效率差异,揭示了快速排序在实际应用中的优势。
58万+

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



