zoukankan      html  css  js  c++  java
  • 冒泡、选择、插入法排序详解

    冒泡法排序

    冒泡法排序,见名思义,就是像吐泡泡一样,一个个泡泡按照应有的顺序吐到水面上,直至排序完成。

    算法详解

    对数组中的元素从前到后进行两两比较交换(0和1,1和2,2和3,...n-1和n),每次完成这样的一种操作,根据具体的条件,最大值或最小值已被挪至最后元素,根据n-1次循环完成对数组排序。

    算法代码

    //冒泡法排序,本例按照升序进行排序
    void bubbleSort(int a[], int n)
    {
    	printf("
    冒泡法排序:
    ");
    	int temp = 0;
    	for(int i = 1; i < n; i++)		//需进行n-1次排序
    	{
    		for(int j = 0; j < n - i; j++)//每次循环完毕最大值已挪至最后元素 (n-i)
    		{
    			if(a[j] > a[j+1])	//两两比较,若前数比后面数大,则进行交换
    			{
    				temp = a[j];
    				a[j] = a[j+1];
    				a[j+1] = temp;
    			}
    		}
    	}
    }
    

    算法详细排序演示

    输入数组数据: 3 6 0 1 4 5 9 7 8 2
    
    第1次: 3 0 1 4 5 6 7 8 2 '9'		//第一次循环排序已将最大值排至最后位置
    第2次: 0 1 3 4 5 6 7 2 '8' 9		//依此类推,直至排序完成
    第3次: 0 1 3 4 5 6 2 '7' 8 9
    第4次: 0 1 3 4 5 2 '6' 7 8 9
    第5次: 0 1 3 4 2 '5' 6 7 8 9
    第6次: 0 1 3 2 '4' 5 6 7 8 9
    第7次: 0 1 2 '3' 4 5 6 7 8 9		//到此实际排序已完成
    第8次: 0 1 '2' 3 4 5 6 7 8 9
    第9次: 0 '1' 2 3 4 5 6 7 8 9		//程序执行完毕,排序完成
    

    选择法排序

    选择法排序,即选择性进行排序,根据特定情况对某个位置数据进行选择最值。

    算法详解

    选择法排序,即选择性进行排序,为每个位置选择最值进行交换插入,即(数组第1个元素分别和第2、3、... 、n)进行比较,采用打擂台的方式,将最值替换至第1位,再次循环即(第2个元素和3、4、.... 、n)比较,插入次值,也是通过n-1次循环完成排序。

    算法代码

    //选择法排序
    void selectSort(int a[], int n)
    {
    	printf("
    选择法排序:
    ");
    	int temp = 0;
    	for(int i = 0; i < n - 1; i++)	//需进行n-1次排序
    	{
    		for(int j = i + 1; j < n; j++)//每次循环将最小值挪至i的位置下标 
    		{
    			if(a[i] > a[j])		//进行两两比较,第i个下标位置的值为最小值
    			{
    				temp = a[i];
    				a[i] = a[j];
    				a[j] = temp;
    			}
    		}
    	}
    }
    

    算法详细排序演示

    输入数组数据: 3 6 0 1 4 5 9 7 8 2
    
    第0次: '0' 6 3 1 4 5 9 7 8 2		//第一次循环排序已将最小值排至最前位置
    第1次: 0 '1' 6 3 4 5 9 7 8 2		//依次类推,选择性的将最小值放置指定位置
    第2次: 0 1 '2' 6 4 5 9 7 8 3
    第3次: 0 1 2 '3' 6 5 9 7 8 4
    第4次: 0 1 2 3 '4' 6 9 7 8 5
    第5次: 0 1 2 3 4 '5' 9 7 8 6
    第6次: 0 1 2 3 4 5 '6' 9 8 7
    第7次: 0 1 2 3 4 5 6 '7' 9 8
    第8次: 0 1 2 3 4 5 6 7 '8' 9		//排序完成
    

    插入法排序

    插入法排序,哈哈,这是我在数据结构中新学习的较为简单的排序方法,即向有序数组中进行插入,放置正确位置的一种排序方法。

    算法详解

    插入法排序,即向有序序列中找到合理位置进行插入数据,从而实现从第一个元素到最后元素全部插入完成排序的过程。第一次外层循环i为1即待插入数据的下标(第二个数据),内层循环j从i的位置开始,使之与前边的数据一一比较,如果小于就交换插入,直至插入到合适的位置,通过n-1次循环将全部数据插入有序序列,完成排序。

    算法代码

    //插入法排序
    void insertionSort(int a[], int n)
    {
    	printf("
    插入法排序:
    ");
    	int temp = 0;
    	for(int i = 1; i < n; i++)	//通过n-1次循环将全部数据完成插入
    	{
    		for(int j = i; j > 0; j--)//每次循环将下标为i的数据从后向前成功插入有序序列 
    		{
    			if(a[j] < a[j-1])		//若后边数据比前边数据就进行交换插入
    			{
    				temp = a[j];
    				a[j] = a[j-1];
    				a[j-1] = temp;	
    			}
    		}
    	}	
    } 
    

    算法详细排序演示

    输入数组数据: 3 6 0 1 4 5 9 7 8 2
    
    第1次: '3 6' 0 1 4 5 9 7 8 2		//将6插入有序序列(3)中,此时完成插入
    第2次: '0 3 6' 1 4 5 9 7 8 2		//将3插入有序序列中(3,6)中,此时完成插入
    第3次: '0 1 3 6' 4 5 9 7 8 2		//将1插入有序序列中(0,3,6)中,此时完成插入
    第4次: '0 1 3 4 6' 5 9 7 8 2		//将4插入有序序列中(0,1,3,6)中,此时完成插入
    第5次: '0 1 3 4 5 6' 9 7 8 2		//依次类推,直至排序完成
    第6次: '0 1 3 4 5 6 9' 7 8 2
    第7次: '0 1 3 4 5 6 7 9' 8 2
    第8次: '0 1 3 4 5 6 7 8 9' 2
    第9次: '0 1 2 3 4 5 6 7 8 9'
    

    总结

    哈哈,对数组的排序有好多方法,我在此介绍的是比较简单且常用的排序方法,当然啦,这些排序方法仍然可以改进修改,更加提高时间复杂度,增加排序效率。如果有小伙伴对此仍有疑虑或有改进的方法,欢迎评论留言,我看到会第一时间回复大家的,哈哈,加油冲冲冲!

  • 相关阅读:
    左边定宽, 右边自适应方案
    C3 Transitions, Transforms 以及 Animation总结
    ES6中的Rest参数和默认参数
    Vue项目搭建流程 以及 目录结构构建
    在vue组件的stylus样式总 取消search类型的input按钮中默认样式
    JS与JQ绑定事件的几种方式.
    `<img>`放到`<div>`中底部出现空隙 以及解放方案.
    总结
    一道简单的编程题_ 关于定时器.
    mybatis-resultType和resultMap
  • 原文地址:https://www.cnblogs.com/gaoliwei1102/p/13153533.html
Copyright © 2011-2022 走看看