#include <stdio.h>
#include <stdlib.h>
void printarray(int *array,int len);
void Range(int *p,int len);
int main(){
/*动态分配数组*/
int *p,NUM;
printf("请输入数组大小:\n");
scanf("%d",&NUM);
if((p=(int*)malloc(NUM*sizeof(int)))==NULL){
printf("NO!");
exit -1;
}
/*输入数组*/
int i;
for(i=0;i<NUM;i++){
scanf("%d",p+i);
}
/*对数组处理*/
printf("原数组:\n");
printarray(p,NUM);
printf("冒泡排序后的数组:\n");
Range(p,NUM);
printarray(p,NUM);
free(p);
return 0;
}
void printarray(int *array,int len){
int i;
for(i=0;i<len;i++){
printf("%d ",*(array+i));
}
printf("\n");
}
void Range(int *p,int len){
int i,j,temp,flag;
for(i=0;i<len-1;i++){
flag=0;
/*进行一轮排序,冒泡出一轮中最大的数,从第1个数取到len-1-i个数*/
for(j=0;j<len-1-i;j++){
if(*(p+j)>*(p+j+1)){//如果左边的数比右边大,则交换
flag=1;//进行了交换
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
if(!flag) break;
printf("第%d轮排序结果",i+1);
printarray(p,len);
}
}
5分钟学会:冒泡排序的优化
最新推荐文章于 2024-08-29 22:47:03 发布