美文网首页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.快速排序
快速排序理解较难,我另起一篇文章,请参照下方链接:
快速排序思想与实现

如有错误之处,请指正。

相关文章

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

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

  • 常用数据结构及算法

    数据结构与算法——常用排序算法及其Java实现 - QueenKing - SegmentFault 思否

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • 第三章:高级排序算法

    归并排序算法(mergeSort) 算法思想:Python使用函数实现: 自底向上的归并排序算法 算法思想:Pyt...

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • 常用排序算法

    常用的排序算法 在此总结一下常用排序算法的代码实现 #include using namespace std;t...

  • Python一行代码实现快速排序

    上期文章排序算法——(2)Python实现十大常用排序算法为大家介绍了十大常用排序算法的前五种(冒泡、选择、插入、...

  • PHP常见排序算法及排序效率

    php 四种排序算法的时间与内置的sort排序比较 3000个元素,四种算法的排序所用的时间比较 冒泡排序 857...

  • 常用的排序算法

    常用的排序算法(PHP实现)_慕课手记

  • 排序算法最强总结及其代码实现(Python/Java)

    前言 本文总结了常用的全部排序算法,内容包括: 排序算法的定义和思路 排序算法的代码实现:Python和Java,...

网友评论

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

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