冒泡排序:两两比较,将最大的数放在右侧
方法一:普通冒泡排序
//冒泡排序:两两比较,将最大的数放在右侧
#include <stdio.h>
void main(){
int a[10],i,j,max;
for(i=0;i<10;i++){
printf("请输入%d个数字:",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<10-1;i++){
for(j=0;j<10-1-i;j++){
if(a[j]>a[j+1]){
max=a[j];
a[j]=a[j+1];
a[j+1]=max;
}
}
}
printf("冒泡排序后的顺序为:");
for(i=0; i<10; i++){
printf("%d ",a[i]);
}
}
方法二:指针冒泡排序
//冒泡排序:两两比较,将最大的数放在右侧
#include <stdio.h>
void sort(int *p){
int i,j,max;
for(i=0;i<10-1;i++){
for(j=0;j<10-1-i;j++){
if(p[j]>p[j+1]){
max=p[j];
p[j]=p[j+1];
p[j+1]=max;
}
/*等同于:
if(*(p+j)>*(p+j+1)){
max=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=max;
}
*/
}
}
}
void main(){
int *p,a[10],i,j;
p = a;
for(i=0;i<10;i++){
printf("请输入%d个数字:",i+1);
scanf("%d",p+i);
}
sort(p);
printf("冒泡排序后的顺序为:\n");
for(i=0; i<10; i++){
printf("%d ",*(p+i)); // 等同于 *(p++)
}
}


本文详细介绍了冒泡排序的两种常见版本,包括普通冒泡排序通过两两比较交换最大值的过程,以及使用指针的优化版。通过实例演示了如何在C语言中实现并优化这一经典算法。

8450

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



