关于冒泡排序两个版本哪个时间复杂度更快?
版本一:
/*
explain something:
program parts is refer to "https://baike.baidu.com/item/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/4602306?fr=kg_qa#3_1"
*/
#include <stdio.h>
int n;
int Bubblesort(int *al);
int main(){
printf("input data number:\n");
scanf("%d",&n);
int a[n];
int i;
printf("input before sort data:\n");
for(i=0 ;i<n ;i++ )
scanf("%d",&a[i]);
Bubblesort(&a);
printf("program system is over,thank for you using");
return 0;
}
int Bubblesort(int *al){
int i,j,z;
for (i=0 ;i<n-1 ;i++)/* 外循环为排序趟数,n个数进行n-1趟 */
for (j=0 ;j<=n-1-i ;j++){/* 内循环为每趟比较的次数,第i趟比较n-i次 */
if(al[j+1]<al[j]){
int t;
t = al[j],al[j] = al[j+1],al[j+1] = t;
}
}
printf("\n");
printf("input after sort data:\n");
for (i=0 ;i<n ;i++)
printf("%d\n",al[i]);
printf("\n");
return 0;
}
版本二:
#include <stdio.h>
int n;
int Bubblesort(int *al);
int main(){
printf("input data number:\n");
scanf("%d",&n);
int a[n];
int i;
printf("input before sort data:\n");
for(i=0 ;i<n ;i++ )
scanf("%d",&a[i]);
Bubblesort(&a);
printf("program system is over,thank for you using");
return 0;
}
int Bubblesort(int *al){
int i,j,z;
for (z=1 ;z<n ;z++)//多次循环
for (i=1 ;i<n ;i++)//右边的
for (j=i-1 ;j>=0 ;j--){//左边的
if(al[i]<al[j]){
int t;
t=al[i],al[i]=al[j],al[j]=t;
}
else
continue;
}
printf("\n");
printf("input after sort data:\n");
for (i=0 ;i<n ;i++)
printf("%d\n",al[i]);
printf("\n");
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
第二个不是冒泡,冒泡不关注方向,但一定是相邻的两个数比较交换的。
原理上更像是插入排序,找到的当前数的正确位置,把占位的数往后挤,再填坑。
至于时间复杂度,两个都是O(n2)。