美文网首页ios学习积累Java学习笔记
常用四种排序算法的思想与实现

常用四种排序算法的思想与实现

作者: 蜗先生 | 来源:发表于2016-12-04 23:12 被阅读133次

    无整理 不简书

    常用的排序算法有冒泡排序、选择排序、插入排序、快速排序,下面简单介绍四种排序方法的思路与实现代码。

    例:四种排序算法把整数 6 23 14 56 78 32 按照从小到大的顺序排序。
    1.冒泡排序
    此例中每次筛选都通过相邻元素的比较把较大的元素移到右侧,一次筛选结束最大的元素移动到最右侧,筛选出来的最大的元素不再参与下一次筛选的比较。6个元素每次筛选出一个最大值,筛选5次就可以确定出顺序。比较次数是未筛选出的整数个数减1。

    6 23 14 56 78 32
    第一次筛选:

    第一次比较:6 23 不交换
    6 23 14 56 78 32
    第二次比较:23 14 交换
    6 14 23 56 78 32
    第三次比较:23 56 不交换
    6 14 23 56 78 32
    第四次比较:56 78 不交换
    6 14 23 56 78 32
    第五次比较:78 32 交换
    6 14 23 56 32/78(第一个最大整数)

    第二次筛选:

    第一次比较:6 14 不交换
    6 14 23 56 32/78
    第二次比较:14 23 不交换
    6 14 23 56 32 /78
    第三次比较:23 56 不交换
    6 14 23 56 32 /78
    第四次比较:56 32 交换
    6 14 23 32 /56(第二个最大整数) 78

    第三次筛选:

    第一次比较:6 14 不交换
    6 14 23 32 /56 78
    第二次比较:14 23 不交换
    6 14 23 32 /56 78
    第三次比较:23 32 不交换
    6 14 23 /32(第三个最大整数) 56 78

    第四次筛选:

    第一次比较:6 14 不交换
    6 14 23 /32 56 78
    第二次比较:14 23 不交换
    6 14 /23(第四个最大整数) 32 56 78

    第五次筛选:

    第一次比较:6 14 不交换
    6 /14(第五个最大整数) 23 32 56 78

    排序结果:6 14 23 32 56 78

    实现代码:

        //冒泡排序
        int[] a = {6, 23, 14, 56, 78, 32};
        for(int i = 0;i < a.length - 1;i++)
        {
            for(int j = 0;j < a.length-1-i;j++)
            {
                if(a[j] > a[j+1])
                {
                    int temp;
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
    

    2.选择排序
    定义一个变量记录最小元素的索引,先假设第一个元素为最小值,最小元素的索引为0,后面的元素分别与第一个元素进行比较,当某一元素小于最小元素时,当前元素的索引赋值给定义的变量,继续与后面的元素进行比较,重复上述操作,所有元素比较完成后,变量中记录的是最小元素的索引,把第一个元素与最小元素进行互换,第一次筛选结束,再进行下一次筛选,筛选出来的最小元素不再参与下一次的筛选。

    6 23 14 56 78 32
    第一次筛选:

    index = 0
    第一次比较:6 23 不大于
    第二次比较:6 14 不大于
    第三次比较:6 56 不大于
    第四次比较:6 78 不大于
    第五次比较:6 32 不大于
    最小值的索引为0,最小元素放在最左侧
    6(第一个最小元素) \23 14 56 78 32

    第二次筛选:

    index = 1
    第一次比较:23 14 大于
    index = 2
    第二次比较:14 56 不大于
    第三次比较:14 78 不大于
    第四次比较:14 32 不大于
    最小值的索引为2,14 与 23互换
    6 14(第二个最小元素)\ 23 56 78 32

    第三次筛选:

    index = 2
    第一次比较:23 56 不大于
    第二次比较:23 78 不大于
    第三次比较:23 32 不大于
    最小索引为2,最小元素放在最左侧
    6 14 23(第三个最小元素)\56 78 32

    第四次筛选:

    index = 3
    第一次比较:56 78 不大于
    第二次比较:56 32 大于
    index = 5
    最小索引为5,56 与 32互换
    6 14 23 32 (第四个最小元素)\78 56

    第五次筛选:

    index = 4
    第一次比较:78 56 大于
    index = 5
    最小索引为5,78 与 56互换
    6 14 23 32 56(第五个最小元素)\78

    排序结果:6 14 23 32 56 78

    实现代码:

    int[] a = {6, 23, 14, 56, 78, 32};
        for(int i = 0; i < a.length; i++)
        {
            int min = i;
            for(int j = i + 1; j < a.length; j++)
            {
                if(a[min] > a[j])
                {
                    min = j;
                }
            }
            if(min != i)
            {
                int temp;
                temp = a[min];
                a[min] = a[i];
                a[i] = temp;
            }
        }
    

    3.插入排序
    假设刚开始只有一个元素,每次取后面的一个元素与前面元素比较,如果取出的元素小于前面的元素,那么与前面进行互换,再与前面的元素进行比较,重复操作,直到取出的元素比前面的元素大为止。每次取出一个元素到最终不再比较为一次插入,最后一个元素插入完成,排序结束。

    6 23 14 56 78 32
    第一次插入:

    第一次比较:23 6 大于
    23在6后面不动

    第二次插入:

    第一次比较:14 23 小于
    14 与 23 互换
    6 14 23 56 78 32
    第二次比较:14 6 大于
    14 在 6 后面不动

    第三次插入:

    第一次比较:56 23 大于
    56 在 23 后面不动

    第四次插入:

    第一次比较:78 56 大于
    78 在 56 后面不动

    第五次插入:

    第一次比较:32 78 小于
    32 与 78 交换
    6 14 23 56 32 78
    第二次比较:32 56 小于
    32 与 56 交换
    6 14 23 32 56 78
    第三次比较:32 23 大于
    32 在 23 后面不动

    排序结果:6 14 23 32 56 78

    实现代码:

    int[] a = {6, 23, 14, 56, 78, 32};
        for(int i = 1; i < a.length; i++)
        {
            for(int j = i; j > 0; j--)
            {
                if(a[j] < a[j - 1])
                {
                    int temp;
                    temp = a[j];
                    a[j] = a[j - 1];
                    a[j - 1] = temp;
                }else
                {
                    break;
                }
            }
        }
    

    4.快速排序
    快速排序理解较难,我另起一篇文章,请参照下方链接:
    快速排序思想与实现

    如有错误之处,请指正。

    相关文章

      网友评论

        本文标题:常用四种排序算法的思想与实现

        本文链接:https://www.haomeiwen.com/subject/ovkcmttx.html