zoukankan      html  css  js  c++  java
  • [C语言] 交换排序之冒泡排序的特性及实现

    [C语言] 交换排序之冒泡排序的特性及实现

    1、算法特性

      冒泡排序是一种简单、稳定的交换排序方法,属于最为基础的排序方法之一。

      其时间复杂度最好情况为O(n)、最差与平均情况为O(n²),空间复杂度为O(1)。

    2、算法思路

      以升序排序为例,比较两个相邻的数,当后者大于前者时,二者交换;当后者小于等于前者时,继续检索。每交换一轮都能将未排序序列中的最大值交换至未排序序列尾,成为已排序序列头。同时每一轮交换结束后下一轮比较次数-1,当比较次数为0时排序完成。

     

    3、实现代码

     1 #include <stdio.h>
     2 #include <stdbool.h>
     3 
     4 // 冒泡排序:相邻两个元素进行比较,把大的放后面小的放前面,一轮完整的比较之后,最大值放在末尾
     5 void bubble_sort(int arr[],int len)
     6 {
     7     // 第i次冒泡,把当前最大值放到arr[len-i]
     8     for(int i= 0; i<len; i++)
     9     {    
    10         bool flag = false;
    11         for(int j=1; j<len-i; j++)
    12         {
    13             if(arr[j] < arr[j-1])
    14             {
    15                 int tmp = arr[j];
    16                 arr[j] = arr[j-1];
    17                 arr[j-1] = tmp;
    18                 flag = true; // 表示该次完整的循环有交换位置
    19             }
    20         }
    21         // 所有的相邻元素都已经有序,代表整个数组有序,不需要再进行排序
    22         if(flag == false)
    23         {
    24             break;    
    25         }
    26     }
    27 }
    28 
    29 void travel(int arr[],int len)
    30 {
    31     for(int i=0;i<len;i++)
    32     {
    33         printf("%d ",arr[i]);    
    34     }    
    35     printf("
    ");
    36 }
    37 
    38 int main()
    39 {
    40     int arr[] = {53,82,9,233,43,14,55,9,4,67};
    41     int len = sizeof(arr)/sizeof(arr[0]);
    42 
    43     travel(arr,len);
    44     bubble_sort(arr,len);
    45     travel(arr,len);
    46 
    47 /*    travel(arr,len);
    48     quick_sort(arr,len);
    49     travel(arr,len);*/
    50 
    51     return 0;
    52 }

    4、测试结果

  • 相关阅读:
    [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)
    [P1768]天路(分数规划+SPFA判负环)
    [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))
    [BZOJ1040][ZJOI2008]骑士(环套树dp)
    [P3759][TJOI2017]不勤劳的图书管理员(分块+树状数组)
    [CF665F]Four Divisors
    [LOJ6235]区间素数个数
    [SDOI2015]约数个数和
    [BZOJ3944]Sum
    [BZOJ2671]Calc
  • 原文地址:https://www.cnblogs.com/usingnamespace-caoliu/p/9432767.html
Copyright © 2011-2022 走看看