美文网首页
排序_交换排序(冒泡排序&快速排序)

排序_交换排序(冒泡排序&快速排序)

作者: Mad_Elliot | 来源:发表于2019-02-22 15:39 被阅读0次

冒泡排序:相邻元素的交换

基本思路:每趟不断将相邻两个元素两两比较,并按“前小后大” 规则交换。
优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序

实现代码:

static void BubbleSortAsc(int[] array)
{
    int temp;
    for (int i = 0; i < array.Length - 1; i++)
    {
        for (int j = 0; j < array.Length - i- 1; j++)
        {
            if (array[j] > array[j + 1])
            {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
}

总结:
1、最好情况:初始序列已经有序,只作比较,不移动对象;最差情况:初始序列逆序。
2、时间复杂度:O(n²) ——因为要考虑最坏情况。
3、稳定性:稳定,因为相同元素前后次序不会改变。


快速排序:跳跃式的交换

基本思想:
1、任取一个元素作为标准(如取第一个元素), 按照该对象值的大小,将整个序列划分为左右两个子序列。标准元素排在这两个子序列中间(这也是该对象最终应安放的位置)。
2、然后分别对这两个子序列重复施行上述方法(递归),直到所有的对象都排在相应位置上为止。

例子:

1、i 标记第一个位置,j 标记最后一个位置;
2、获取标准元素21(第一个元素);
3、从 j 开始往前遍历,遇到小于21则将该元素赋值给i位置,i+1,退出遍历;
4、从i位置往后遍历,遇到大于21则将该元素移到j位置,j-1,退出遍历;
5、重复3、4步,直到i = j,把21塞回来。

实现代码:

static void QuickSort(int[] a, int left, int right)
{
    int i = left;
    int j = right;
    int temp = a[left];
    while (i < j)
    {
        //右端往前遍历,遇到小于标准元素temp则退出循环
        while (i < j && temp <= a[j])
            j--;
        if (i < j)//排除i=j退出循环的情况
        {
            a[i] = a[j];
            i++;
        }
        //左端遍历
        while (i < j && temp > a[i])
            i++;
        if (i < j)
        {
            a[j] = a[i];
            j--;
        }

    }
    a[i] = temp;
    if (left < i) QuickSort(a, left, i - 1);
    if (right > i) QuickSort(a, i + 1, right);
}

总结:
1、因为每趟可以确定不止一个元素的位置,而且呈指数增加,所以特别快。
2、时间效率:O(nlog2n) —因为每趟确定的元素呈指数增加

相关文章

  • 排序算法

    冒泡排序 选择排序 插入排序二分插入排序希尔排序 堆排序 归并排序 快速排序 交换排序类:冒泡排序快速排序 选择排...

  • 排序算法

    排序算法 冒泡排序 选择排序 直接插入排序 希尔排序 堆排序 归并排序 快速排序 冒泡排序 冒泡排序是一种交换排序...

  • 排序算法之交换排序

    利用交换数据元素的位置进行排序的方法称为交换排序。常见的交换排序方法有冒泡排序和快速排序。 1. 冒泡排序 1.1...

  • 排序算法篇_快速排序法

      快速排序(Quick Sort)法和冒泡排序法类似,都是基于交换排序思想的。快速排序对冒泡排序法进行了改进,从...

  • 给自己备份的排序代码

    交换排序 冒泡排序 快速排序 插入排序 直接插入排序 希尔排序 选择排序 简单选择排序 堆排序

  • Java 常见的 8 种排序算法(内排序)

    排序分类 内部排序 插入排序:直接插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:直接选择排序、堆排序...

  • 算法与数据结构知识汇总(八、常见的八大排序算法)

    排序技术有:插入排序(直接插入排序、希尔排序)、选择排序(简单选择排序、堆排序)、交换排序(冒泡排序、快速排序)、...

  • JavaScript:十大排序的算法思路和代码实现

    本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(...

  • 排序算法

    排序算法 非线性时间比较类排序 交换排序 冒泡排序 快速排序 插入排序 插入排序 希尔排序 选择排序 简单选择排序...

  • 程序员必须掌握的8大排序算法

    分类:1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)...

网友评论

      本文标题:排序_交换排序(冒泡排序&快速排序)

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