5分钟学会:冒泡排序的优化

在这里插入图片描述

#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); 
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高达十几个

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值