基础排序算法


  • 插入排序
    从空集合开始,不断把记录插入到合适位置的排序方法
  • 交换排序
    交换元素的位置进行排序

插入排序

直接插入排序
public static void drectlyInsertSort(int[] array){
        for (int i = 1; i < array.length; i++) {
            int temp = array[i];
            int j = 0;
            for (j = i-1; j >= 0 && array[j]>temp; j--) {
                array[j+1] = array[j];;
            }
            array[j+1] = temp;
        }
    }

时间复杂度
最好:已经有序的情况下,只需要遍历数列一次,为O(n)。
最坏:反序情况下比较次数依次是1 + 2 + 3 + ... + (N - 1),即(1/2)n(n-1)次。O(n^2)。
平均:O(n^2)
空间复杂度:只有一个额外变量,所以为O(1)

折半插入算法

public static void binaryInsertSort(int[] array) {
        int temp;
        int low = 0;
        int high;
        int middle;
        for (int i = 1; i <= array.length - 1; i++) {
            temp = array[i];
            low = 0;
            high = i - 1;
            while (low <= high) {
                middle = (low + high) / 2;
                if (temp < array[middle]) {
                    high = middle - 1;
                } else {
                    low = middle + 1;
                }
            }
            int j;
            for (j = i - 1; j >= high + 1; j--) {
                array[j + 1] = array[j];
            }
            array[j + 1] = temp;
        }
    }
  • 希尔排序
public static void shellSort(int[] array, int[] numbers) {

        int i, j, temp, m, k, span;
        for (m = 0; m < numbers.length; m++) {
            span = numbers[m];
            for (k = 0; k < span; k++) {
                for (i = k + span; i < array.length; i = i + span) {
                    temp = array[i];
                    j = i - span;
                    while (j > -1 && temp < array[j]) {
                        array[j + span] = array[j];
                        j = j - span;
                    }
                    array[j + span] = temp;
                }
            }


        }

    }

交换排序

冒泡排序
public static void maoPaoSort(int[] array) {
        int n = array.length;
        for (int i = 0; i < (n-1); i++) {
            for (int j = 0; j < (n-1-i); j++) {
                if(array[j]>array[j+1]){
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
    }
快速排序
public static int partition(int[] array,int low,int high) {
        int temp = array[low];
        while(low < high){
            while(low < high && temp <= array[high])
                high--;
            if(low < high)
            array[low++] = array[high];
            while(low < high && temp >= array[low])
                low++;
            if(low < high)
            array[high--] = array[low];
        }
        array[low] = temp;
        return low;
    }

    public static void quickSort(int[] array,int low,int high) {
        int standardLoc;
        if(low<high) {
            standardLoc = partition(array,low,high);
            quickSort(array,low,standardLoc-1);
            quickSort(array,standardLoc+1,high);
        }
    }

    public static int[] oldArray = {4,786,24,65,76,23,15,97,34,48,92,44};
//on call
quickSort(oldArray,0,oldArray.length-1);

选择排序

不断从待排序序列中选择最小的记录放到已经排序的记录后面

public static void swapSort(int[] oldArray){
        int smallIndex;
        int temp;
        int i,j;
        for(i = 0;i<oldArray.length - 1;i++){
            smallIndex = i;
            for(j = i+1;j<oldArray.length;j++){
                if(oldArray[smallIndex] >= oldArray[j]){
                    smallIndex = j;
                }
            }
            if(smallIndex != i){
                temp = oldArray[i];
                oldArray[i] = oldArray[smallIndex];
                oldArray[smallIndex] = temp;
            }
        }
}

比较次数依次为(n-1)、(n-2)、、、1,故时间复杂度 O(n2),空间复杂度O(1);

堆排序:https://blog.csdn.net/qq_36186690/article/details/82505569

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 简单排序 插入排序 想象一下插队的过程... 一个人通过插队的方式排到前面,而将原本在他前面的人挤到了后面的位置。...
    Kasheem_Lew阅读 1,459评论 0 4
  • 注:方法说明 一、交换排序 1. 冒泡排序 1.1 算法描述 它重复地走访过要排序的数列,一次比较两个元素,如果它...
    _fatef阅读 456评论 0 0
  • 常见的基础排序算法大体上可以分为9种,这篇先介绍比较简单的6种排序算法。剩下的3种在下篇介绍。 冒泡排序 冒泡排序...
    朴勋l阅读 521评论 0 1
  • 谁知道他啊 就像谁知道我一样 闲时一杯清酒 忙时一捧清泉 谁知道我啊 就像谁知道他一样 在时沉默寡言 走时沉默寡言...
    乙戌君阅读 145评论 0 3
  • Cleere阅读 163评论 0 0