手寫常見排序算法(冒泡排序储耐,選擇排序羊初,插入排序,快速排序) 貼圖板

手寫常見排序算法
1.交換函數(shù)(異或運(yùn)算寫法)
因?yàn)橐獙懗S门判蚴蚕妫钥隙〞玫浇粨Q函數(shù)长赞,下面就是交換函數(shù)的一種位運(yùn)算寫法(給新手小白的說明,老手勿看)

public class Algorithm {

    public static void swap(int[] arr, int i, int j){

        if (i != j){  //防止交換地址相同的數(shù)據(jù) (地址相同的數(shù)據(jù) 在進(jìn)行異或運(yùn)算時(shí) 會變成0)

            //異或運(yùn)算  實(shí)現(xiàn)交換(不用開辟額外空間闽撤,位運(yùn)算速度較快)

            //可以這么理解 已知  a = arr[i]    b = arr[j],
            //因?yàn)?是異或操作所以
            //有這些結(jié)論 :a ^ a =0 ,  a ^ 0 = a ,  b ^ b = 0  ,b ^ 0 = b

            arr[i]  = arr[i] ^ arr[j];  //相當(dāng)于 a =  a^b



            arr[j] = arr[i] ^ arr[j];   //相當(dāng)于 b =  (a^b) ^ b  因?yàn)? 異或操作滿足結(jié)合律得哆,所以:b = a^(b^b) ;
                                        // 又因?yàn)?b^b = 0; 所以:b = a ^ 0;又因?yàn)椋篴 ^ 0 = a 所以:b = a;


            arr[i] = arr[i] ^ arr[j];   //相當(dāng)于 a = (a^b)    ^    (  (a^b)^b  )  所以這也就相當(dāng)于 a = (a^b)  ^ a;
                                        // 同理因?yàn)? 異或操作滿足交換律 所以:a =  (b^a) ^ a ;
                                        //又因?yàn)?異或操作滿足結(jié)合律 ,所以:a = b ^(a^a);
                                        //又因?yàn)?a^a = 0; 所以 a= b^ 0哟旗;又因?yàn)椋篵^0 =b 所以: a = b;

            //以上就是交換函數(shù)原理

        }

    }

2.冒泡排序贩据,選擇排序栋操,插入排序,快速排序的寫法

public class algorithm {

    //冒泡排序

    public static void bubblingSort(int[] arr){

        for(int i = 1; i < arr.length; i++){

            for(int j = 0; j < arr.length - i; j++){

                if(arr[j] > arr[j+1]){

                    swap(arr,j,j+1);

                }

            }

        }

    }

    //選擇排序

    public static void selectSort(int[] arr){

        for(int i = 1; i < arr.length; i++){

            int maxIndex = arr.length-i;

            for (int j = 0; j < arr.length - i; j++){

                maxIndex = arr[j] > arr[maxIndex] ? j : maxIndex;

            }

            swap(arr,maxIndex,arr.length-i);

        }

    }

    //插入排序

    public static void insertSort(int[] arr){

        for(int i = 1; i < arr.length; i++){

            for(int j = i; j > 0 && arr[j] < arr[j-1]; j--){

                swap(arr,j,j-1);

            }

        }

    }

    //快速排序

    public static void quickly(int[] arr, int leftIndex, int rightIndex){

        if(leftIndex >= rightIndex){

            return;

        }

        int left = leftIndex;

        int right = rightIndex;

        int norm = arr[right];

        while(left < right){

            while (left < right && arr[left] <= norm){

                left++;

            }

            arr[right] = arr[left];

            while (right < left && arr[right] >= norm){

                right--;

            }

            arr[left] = arr[right];

        }

        arr[right] = norm;

        quickly(arr,right + 1, rightIndex);

        quickly(arr, leftIndex, left - 1);

    }

    //交換函數(shù)

    public static void swap(int[] arr, int i, int j){

        if(i != j){

            arr[i] = arr[i] ^ arr[j];

            arr[j] = arr[i] ^ arr[j];

            arr[i] = arr[i] ^ arr[j];

        }

    }

    //測試主函數(shù)

    public static void main(String[] args){

        int[] arr = {0,1,1,5,24,25,56,85,647,8536,7445,89,644,0};

        //bubblingSort(arr);

        //quickly(arr,0,arr.length - 1);

        //insertSort(arr);

        selectSort(arr);

        for (int i : arr){

            System.out.println("i = " + i);

        }

    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饱亮,一起剝皮案震驚了整個(gè)濱河市矾芙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌近上,老刑警劉巖蠕啄,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異戈锻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)和媳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門格遭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人留瞳,你說我怎么就攤上這事拒迅。” “怎么了她倘?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵璧微,是天一觀的道長。 經(jīng)常有香客問我硬梁,道長前硫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任荧止,我火速辦了婚禮屹电,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跃巡。我一直安慰自己危号,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布素邪。 她就那樣靜靜地躺著外莲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兔朦。 梳的紋絲不亂的頭發(fā)上偷线,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音烘绽,去河邊找鬼淋昭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛安接,可吹牛的內(nèi)容都是我干的翔忽。 我是一名探鬼主播英融,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歇式!你這毒婦竟也來了驶悟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤材失,失蹤者是張志新(化名)和其女友劉穎痕鳍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體龙巨,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笼呆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旨别。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诗赌。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秸弛,靈堂內(nèi)的尸體忽然破棺而出铭若,到底是詐尸還是另有隱情,我是刑警寧澤递览,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布叼屠,位于F島的核電站,受9級特大地震影響绞铃,放射性物質(zhì)發(fā)生泄漏镜雨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一憎兽、第九天 我趴在偏房一處隱蔽的房頂上張望冷离。 院中可真熱鬧,春花似錦纯命、人聲如沸西剥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞭空。三九已至,卻和暖如春疗我,著一層夾襖步出監(jiān)牢的瞬間咆畏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工吴裤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旧找,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓麦牺,卻偏偏與公主長得像钮蛛,于是被迫代替她去往敵國和親鞭缭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容