• 排序算法00_冒泡排序


    1、普通冒泡排序

     1 //冒泡排序
     2 #include<stdio.h>
     3 int main(){
     4     int a[10],i,j,t;
     5     printf("enter 10 numbers:");    
     6     for(i=0;i<10;i++){
     7         scanf("%d",&a[i]);
     8     }
     9     //数组中有n个数,依次找出n-1个较大数,所以外层循环的循环次数为n-1
    10     for(i=0;i<9;i++){
    11     //每一轮比较中,共进行j次比较,j从0开始循环,第0次循环(n-1)-0次;
    12         //第1次循环(n-1)-1次;第i次循环,循环(n-1)-i次                                                                                                                
    13         for(j=0;j<9-i;j++){
    14             //如果前一个数a[j]比后一个数a[j+1]大,则交换两个数
    15             if(a[j]>a[j+1]){
    16                 t=a[j+1];a[j+1]=a[j];a[j]=t;
    17             }
    18         }
    19     }
    20     printf("the sorted numbers:");
    21     for(i=0;i<10;i++){
    22         printf("%3d",a[i]);
    23     }
    24     return 0;
    25 }

    2、冒泡排序的优化一

    在一个未排序的数列中,可能不需要执行完全部的排序过程,数列就已经有序了,后面的排序过程也不用执行了,这样会节省很多计算机资源。

     1 //冒泡排序的优化一
     2 #include<stdio.h>
     3 int main(){
     4     void sort(int array[],int n);
     5     int array[10]={12,34,54,21,88,3,5,98,1,9}; 6     int n=10;
     7     sort(array,n);
     8     for(int i=0;i<10;i++)
     9         printf("%d  ",array[i]);
    10 }
    11 void sort(int array[],int n){
    12     int temp;
    13     //定义变量x来测试外循环执行了多少次,y测试内循环执行了多少次
    14     int x=0,y=0;
    15     //设置标志变量flag来判断数列是否已经有序,如果数列已经有序,则不需要再执行排序步骤,节省资源开销
    16     int flag=1;
    17     for(int i=0;i<n-1&&flag;i++){
    18         //循环开始时将flag置为0,如果有任意两个数位置发生了交换,执行交换语句的同时也使flag置为1,下次继续进行排序;
    19         //如果交换语句没有执行,则证明数列中任何两个数字之间没有逆序,flag为0,排序过程不再执行
    20         flag=0;
    21         for(int j=0;j<n-1-i;j++){
    22             if(array[j]>array[j+1]){
    23                 temp=array[j];array[j]=array[j+1];array[j+1]=temp;
    24                 flag=1;
    25                 ++y;
    26             }
    27         }
    28         ++x;
    29     }
    30     printf("内循环执行了%d次
    ",y);
    31     printf("外循环执行了%d次
    ",x);
    32 }

    执行结果为

    这样效果不是特别明显,换一组数据测试一下,数组序列为{2,0,1,3,4,5,6,7,8,9}

    效果很明显

  • 相关阅读:
    laravel生命周期
    工厂模式
    PHP保留两位小数的几种方法
    存储单位转换
    防盗链之URL参数签名
    redis基础
    Redis 如何实现持久化
    Python高级语法-私有属性-with上下文管理器(4.7.3)
    Python高级语法-私有属性-魔法属性(4.7.2)
    Python高级语法-私有属性-名字重整(4.7.1)
  • 原文地址:https://www.cnblogs.com/zytomcat/p/9309323.html
Copyright © 2020-2023  润新知