• 八大排序(二)冒泡排序


    八大排序(二)冒泡排序



    这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

    遍历

    在介绍冒泡排序之前我先引入一个概念,以方便解释。
    遍历,字面意思是遍历就是全部走遍,到处周游的意思。当然遍历的概念也适合于多元素集合的情况,如数组。
    (程序代码上的意思是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问,访问结点所做的操作依赖于
    具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。)【()中的内容这些以后会学到】
    

    主要思路

    冒泡排序每次遍历整个数列 ,先找出最大的一项放到数列的最后一项(与最后一项的数交换), 
    再找出第二大的一项放到倒数第二项,以此类推, 直到整个数列排序完
    我们可以先假设有一个n项的数列, 先遍历n项, 找到最大的一项放到第n个位置(与第n个位置的数交换), 
    再遍历n-1项(因为最后一项已经是最大的,没必要再遍历),以此类推,直到整个数列排完。
    此过程只需要n-1次, 剩下的一定是最小的数, 放到第一项即可。
    

    下图是一个n = 7的冒泡排序
    首先找到了89(最大一项),和55(最后一项)交换,其次找到了61, 和55(倒数第二项)交换……直到结束

    代码实现

    函数

    在这里我要引入一个叫函数的概念

    • 我们在做程序开发的时候,为了便于多个人开发,或者是的代码的思路更清晰,喜欢将独立的功能模块独立出来,写成函数。
      比如我要冒泡排序,写个函数就可以了。
    • BubbleSore(int a[],int n) { 排序算法实现; } 所有项目中的地方都可以调用这个函数,代码只要写一遍就可以了。
    • 既然排序的是数组,所以直接是对待排序的那个数组在操作。不需要返回值,数组就改变了, 所以直接命名成void型。

    代码

    #include<stdio.h>
    int arr[100000];//定义一个非常大的数组, 防止溢出
          //Bubblesort是冒泡排序的英文,len是length的缩写,相当于n,
          //()内是参数列表【就是你要输入函数体内的量】,注意要输入一个数组时要在int后+*
    void BubbleSort(int *arr,int len)
    {
          int temp, i, j;
          for(i = 0; i < len - 1; i++)//意味着执行n - 1次
                for(j = 0; j < len - 1 - i; j++)//len-1-i不遍历那些已经按顺序放到末尾的数, 因为i次意味着排好i个数了
                {
                      if(arr[j] > arr[j+1])//如果左边大于右边就将两个数的位置调换
    		  {
    		        temp = arr[j+1];
    			arr[j+1] = arr[j];
    			arr[j] = temp; 
    		  }
    	    }
    }
    
    int main()
    {
    	int i, n;
    	scanf("%d",&n);
    	for(i = 0; i < n; i++)//输入一个数列
            {
                  scanf("%d", &arr[i]);
    	}
    	BubbleSort(arr, n+1);//调用冒泡排序函数进行排序
    	for(i = 0; i < n; i++)//输出排好序的数列
            {
                  printf("%d ",arr[i]);
            }
    		
    	
    	return 0;
    }
    
  • 相关阅读:
    Add Binary
    Java笔记之String
    Java笔记之数组
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Longest Common Prefix
    Roman to Integer
    Palindrome Number
    Reverse Integer
    _cdel stdcall
  • 原文地址:https://www.cnblogs.com/OctopuSS/p/13975709.html
Copyright © 2020-2023  润新知