首页 > 编程语言 > 详细

冒泡排序

时间:2020-11-15 11:16:03      阅读:30      评论:0      收藏:0      [点我收藏+]

冒泡排序



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

遍历

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

主要思路

冒泡排序每次遍历整个数列 ,先找出最大的一项放到数列的最后一项(与最后一项的数交换), 
再找出第二大的一项放到倒数第二项,以此类推, 直到整个数列排序完
我们可以先假设有一个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;
}

冒泡排序

原文:https://www.cnblogs.com/OctopuSS/p/13975709.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!