博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法
阅读量:5734 次
发布时间:2019-06-18

本文共 2682 字,大约阅读时间需要 8 分钟。

选择排序:O(n^2) 不稳定

a={5,2,8,4,9,1}

第一趟i=0:最小1,1和5交换:1,   2,8,4,9,5

第二趟i=1:最小2,                  1,2,   8,4,9,5

第三趟i=2:最小4,4和8交换:1,2,4,     8,9,5

第四趟i=3:最小5,5和8交换:1,2,4,5,    9,8

第五趟i=4:最小8,8和9交换:1,2,4,5,8,   9

public static void selectSort(int[] a){for (int i = 0; i < a.length; i++) {int k=i;for (int j = k; j < a.length; j++) {if(a[k]>a[j]){k=j;}}if(i!=k){int temp = a[i];a[i]=a[k];a[k]=temp;}}}

堆排序:o(nlogn) 不稳定

 

冒泡排序:O(n)~O(n^2) 稳定

public static void bubbleSort(int[] a){        for (int i = 0; i < a.length; i++) {            for (int j = 0; j < a.length-i-1; j++) {                if(a[j]>a[j+1]){                    int temp=a[j];                    a[j]=a[j+1];                    a[j+1]=temp;                }            }        }    }

 

快速排序:O(nlogn) 不稳定

比如:对R={37, 40, 38, 42, 461, 5, 7, 9, 12}进行一趟快速排序的过程如下(注:下面描述的内容中元素下表从 0 开始):

开始选取基准 base = 37,初始位置下表 low = 0 , high = 8  , 从high=8,开始如果R[8] < base ,  将high位置中的内容写入到R[low]中, 将high位置空出来, low = low +1 ;

从low开始探测,由于low=1 , R[low] > base ,所以将R[low]写入到R[high] , high = high -1 ;

检测到low < high ,所以第一趟快速排序仍需继续:

此时low=1,high=7,因为 R[high] < base ,所以将 R[high] 写入到到R[low]中,low = low + 1;

从low开始探测,low = 2 , R[low] >base ,所以讲R[low]写入到R[high],high=high-1;

继续检测到 low 小于high

此时low=2,high=6,同理R[high] < base ,将R[high] 写入到R[low]中,low=low+1;

从low继续探测,low = 3 , high=6 , R[low] > base , 将R[low]写入到R[high]中,high = high-1;

继续探测到low小于high

此时low=3,high=5,同理R[high] < base,将R[high]写入到R[low]中,low = low +1;

从low继续探测,low = 4,high=5,由于R[low] > base , 将R[low]写入到R[high]中,high = high -1 ;

此时探测到low == high == 4 ;该位置即是base所在的位置,将base写入到该位置中.

然后再对子序列Rs1 = {12,9,7,5} 和 Rs2={461,42,38,40}做一趟快速排序,直到Rsi中只有一个元素,或没有元素。

private static boolean isEmpty(int[] n) {        return n == null || n.length == 0;    }    // ///    /**     * 快速排序算法思想——挖坑填数方法:     *      * @param n 待排序的数组     */    public static void quickSort(int[] n) {        if (isEmpty(n))            return;        quickSort(n, 0, n.length - 1);    }    public static void quickSort(int[] n, int l, int h) {        if (isEmpty(n))            return;        if (l < h) {            int pivot = partion(n, l, h);            quickSort(n, l, pivot - 1);            quickSort(n, pivot + 1, h);        }    }    private static int partion(int[] n, int start, int end) {        int tmp = n[start];        while (start < end) {            while (n[end] >= tmp && start < end)                end--;            if (start < end) {                n[start++] = n[end];            }            while (n[start] < tmp && start < end)                start++;            if (start < end) {                n[end--] = n[start];            }        }        n[start] = tmp;        return start;    }

 

转载于:https://www.cnblogs.com/yunger/p/7514133.html

你可能感兴趣的文章
《图解HTTP》学习笔记(四):返回结果的HTTP状态码
查看>>
翻译连载 | 附录 B: 谦虚的 Monad-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇...
查看>>
Spring 学习笔记(一)Spring核心容器
查看>>
webpack+typescript+threejs+vscode开发
查看>>
python读excel写入mysql小工具
查看>>
如何学习区块链
查看>>
搜索问题的办法
查看>>
微信分销系统商城营销5大重点
查看>>
求职准备 - 收藏集 - 掘金
查看>>
【Java】类的循环初始化是否会引起死锁?
查看>>
htm5新特性(转)
查看>>
Linux-Centos启动流程
查看>>
php 设计模式
查看>>
后端技术精选 - 收藏集 - 掘金
查看>>
Laravel 服务容器
查看>>
6天面试、斩获6家硅谷巨头Offer,我是如何做到的?
查看>>
TensorFlow 1.0已死,TensorFlow 2.0万岁
查看>>
Scala模式匹配的亮点——Martin Odersky访谈(四)
查看>>
mac安装kubernetes并运行echoserver
查看>>
多页架构的前后端分离方案(webpack+express)
查看>>