面試經(jīng)常問到的排序算法.md

話不多說,直接看代碼,代碼都已經(jīng)經(jīng)過測(cè)試。

class Test {

    /**
     * @param array
     */
    public static void bubbleSort(int array[]) {
        int length = array.length;
        int temp;

        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }

    // 快速排序
    public static void quickSort(int s[], int left, int right) {
        if (left < right) {// 防止左右值傳入有誤
            //Swap(s[left], s[(left + right) / 2]); //將中間的這個(gè)數(shù)和第一個(gè)數(shù)交換 參見注1
            int i = left;
            int j = right;
            int x = s[left];//s[l]即s[i]就是第一個(gè)坑

            while (i < j) {
                while (i < j && s[j] >= x) // 從右向左找第一個(gè)小于x的數(shù)
                    j--;

                if (i < j) {
                    s[i] = s[j];// 將找到的這個(gè)數(shù)填到挖的坑里
                    i++;

                }

                while (i < j && s[i] < x) // 從左向右找第一個(gè)大于等于x的數(shù)
                    i++;

                if (i < j) {
                    s[j] = s[i];
                    j--;
                }

            }

            // 退出時(shí), i等于j, 將x填到這個(gè)坑中
            s[i] = x;

            // i指向坑的位置
            quickSort(s, left, i - 1); // 遞歸調(diào)用
            quickSort(s, i + 1, right);

        }
    }

    // 插入排序
    public static void insertSort(int[] a) {
        int length = a.length;//數(shù)組長度
        int insertNum;//要插入的數(shù)
        for (int i = 1; i < length; i++) {//插入的次數(shù)
            insertNum = a[i];//要插入的數(shù)
            int j = i - 1;//已經(jīng)排序好的序列元素個(gè)數(shù)
            while (j >= 0 && a[j] > insertNum) {//序列從后到前循環(huán),將大于insertNum的數(shù)向后移動(dòng)一格
                a[j + 1] = a[j];//元素移動(dòng)一格
                j--;
            }
            a[j + 1] = insertNum;//將需要插入的數(shù)放在要插入的位置
        }
    }


    public static void selectSort(int[] a) {
        int length = a.length;
        for (int i = 0; i < length; i++) {//循環(huán)次數(shù)
            int key = a[i];
            int position=i;
            for (int j = i + 1; j < length; j++) {//選出最小的值和位置
                if (a[j] < key) {
                    key = a[j];
                    position = j;
                }
            }
            a[position]=a[i];//交換位置
            a[i]=key;
        }
    }

    public static void printArray(@NotNull int array[]) {

        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }

    }

    public static void main(String[] args) {
        int array[] = {3, 1, 4, 6, 8, 2, 9, 0};
        // bubbleSort(array);
        selectSort(array);
        printArray(array);
    }
}

參考文章

  1. 一遍記住Java常用的八種排序算法與代碼實(shí)現(xiàn)
  2. 白話經(jīng)典算法系列之六 快速排序 快速搞定
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,027評(píng)論 25 709
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,987評(píng)論 2 59
  • 有人提問: 請(qǐng)真人回答“如何治療官員的推脫之功”? 一元真人說:啊。這個(gè)好。舉個(gè)例子啊,看到自己的兒子,在搞推脫之...
    一元真人閱讀 380評(píng)論 0 3
  • 一個(gè)家庭失去了溫暖,婚姻還有意義嗎?一個(gè)男人沒有一點(diǎn)追逐夢(mèng)想的熱忱,等死般的過日子,生活還有什么意義?一個(gè)...
    李水心閱讀 1,957評(píng)論 1 3
  • ………… 漸漸的我恢復(fù)了神志。 看著身下這個(gè)淚眼旁沱的女孩,那凄慘的眼神兒一直盯著我,嘴里不停的呢喃:“為什么?這...
    冒牌文人閱讀 308評(píng)論 0 0

友情鏈接更多精彩內(nèi)容