zoukankan      html  css  js  c++  java
  • 数据结构中的排序算法总结

    数据结构中的排序算法

    当待排序序列基本有序时优先选择简单排序,快速排序平均次数少于堆排序

    1   插入排序

    1)  直接插入排序

    第一次将位置0和位置1进行比较,小的放前。
    第二次将位置2上的数字,插入到位置0和位置1中。

    第k次将位置k上的数字,插入到第k-1次已经完成的序列中。

        5  2  6  0  3  9  1  7  4  8

    一趟  2  5  6  0  3  9  1  7  4  8

    二趟  2  5  6  0  3  9  1  7  4  8

    三趟  0  2  5  6  3  9  1  7  4  8

    四趟  0  2  3  5  6  9  1  7  4  8

    五趟  0  2  3  5  6  9  1  7  4  8

    六趟  0  1  2  3  5  6  9  7  4  8

    七趟  0  1  2  3  5  6  7  9  4  8

    八趟  0  1  2  3  4  5  6  7  9  8

    九趟  0  1  2  3  4  5  6  7  8  9

    2)希尔排序

    先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。

             49  38  65  97  76  13  27  49  55  04

    第一趟增量5  13  27  49  55  04  49  38  65  97  76

    第二趟增量3  13  04  49  38  27  49  55  65  97  76 

    第三趟增量1  04  13  27  38  49  49  55  65  76  97     

    2   选择排序

    选择排序每一趟从待排序的数据元素中选出最小(或最大)的一个元素,第i趟确定最小元素的时候会通过不断地比较选择最小值与第i个位置元素交换

    每次都是遍历一遍剩下要排序的部分,找出其最大值或最小值。关键码比较次数与记录地初始排列无关

    1)直接选择排序


    第一次取区间[0,N],选择该区间最小的数和位置0的数进行交换;
    第二次取区间[1,N],选择该区间最小的数和位置1的数进行交换;
    第三次取区间[2,N],选择该区间最小的数和位置2的数进行交换;
    依次往下,可以得到排序,这就是选择排序。

    ex
           8  5  9  3  7

    遍历1号  3  5  9  8  7

    遍历2号  3  5  9  8  7

    遍历3号  3  5  7  8  9

    遍历4号     3  5  7  8  9

    2)堆排序

    3  交换排序

    1)冒泡排序

    第0趟交换

    34  23  1  2

    34  23  1  2

    34  1  23  2

    1  34  23  2

    第1趟交换

    1  34  23  2

    1  34  2  23

    1  2  34  23

    第2趟交换

    1  2  34  23

    1  2  23  34

    public class BubbleSort {
    	public static void sort(long[] arr) {
    		long tmp=0;
    		//i趟交换,为第i个位置赋值
    		for (int i = 0; i < arr.length-1; i++) {
    			for (int j = arr.length-1; j > i; j--) {
    				if (arr[j]<arr[j-1]) {
    					//交换
    					tmp=arr[j];
    					arr[j]=arr[j-1];
    					arr[j-1]=tmp;
    				}
    			}
    		}
    	}
    }
    

     

    2)快速排序

    1从序列当中选择一个基准数(pivot)

    2将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧

    重复步骤1.2,直到所有子集当中只有一个元素为止。

    4  归并排序

     https://www.cnblogs.com/chengxiao/p/6194356.html

  • 相关阅读:
    不要在该约炮的年纪谈佛系
    第三周文件处理和函数------上
    mysql的binlog和slow_log慢日志
    扩展中国剩余定理【模板】
    CF277B Set of Points——构造题
    ZOJ-3774 Power of Fibonacci——等比数列求和&&等价替换
    2019牛客暑期多校训练营(第九场)The power of Fibonacci——循环节&&CRT
    2019牛客暑期多校训练营(第九场)Quadratic equation——二次剩余(模奇素数)&&Cipolla算法
    2019牛客暑期多校训练营(第九场)All men are brothers——并查集&&组合数
    2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem——哈希表&&二进制枚举
  • 原文地址:https://www.cnblogs.com/52circle/p/9176290.html
Copyright © 2011-2022 走看看