冒泡排序,在学到循环和数组的时候肯定会接触到这个最基本的排序算法。为什么这种算法要叫做冒泡排序呢?是因为这个排序算法有点像水泡向上冒。在大学计算机的课程中一定会讲到的排序方法,博主我作为计科的一员也是要学习的,先行偷学ing (逃

思想与举例

冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。

下面以6 2 5 3进行举例说明

第一轮排序

  1. 6 2 5 3(初始)
  2. 2 6 5 3(2 6交换)
  3. 2 5 6 3(5 6交换)
  4. 2 5 3 6(3 6交换)

第二轮排序

  1. 2 5 3 6(初始)
  2. 2 5 3 6(2 5不变)
  3. 2 3 5 6(3 5交换)

至此由小到大的排序已经完成。

算法总结与实现

首先创建数组nums[N]然后进行N-1轮的比较,然后在每轮中进行逐个比较,若不符合大小排序则进行交换,直到所有数符合大小排序

#include <stdio.h>

//冒泡排序控制Demo
//冒泡排序结果和方式
//结果,使不按大小排序的数组,通过排序后按大小排列
//方式,遍历比较

//
//排序方式从高到低
//

int main(int argc, char const *argv[])
{
    int i,j,temp,n;
    int nums[10]; //要进行排序的数组
    printf ("请输入10个数字\n")
    scanf ("%d %d %d %d %d %d %d %d %d %d",&nums[0],&nums[1],&nums[2],&nums[3],&nums[4],&nums[5],&nums[6],&nums[7],&nums[8],&nums[9]);

    //
    //降序排列
    //
    
    //外层循环
    for (i = 0; i < 10 - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮
    {
        //内层循环
        for (j = 0; j < 10 - 1 - i; j++) //遍历一轮,并进行循环(减i是除去排序好的数字)
        {
            //判断后面一个数是否大于前面一个数,是的话就进行交换
            if (nums[j] < nums[j + 1])
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    //输出数组
    printf ("降序排列:\n");
    for (n = 0; n < 10; n++)
    {
        printf ("%d\n",nums[n]);
    }

    printf ("\n");

    //
    //升序排列
    //

    //外层循环
    for (i = 0; i < 10 - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮
    {
        //内层循环
        for (j = 0; j < 10 - 1 - i; j++) //遍历一轮,并进行循环
        {
            //判断后面一个数是否大于前面一个数,是的话就进行交换
            if (nums[j] > nums[j + 1]) //升降序通过这个大于小于号进行控制
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    //输出数组
    printf ("升序排列:\n");
    for (n = 0; n < 10; n++)
    {
        printf ("%d\n",nums[n]);
    }

    return 0;
}

 

说点什么
本博客评论规则(评论规则什么的都是浮云,小声
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...