排序算法(原理及實現(xiàn))

生成隨機數(shù)

int * getrand(int min, int max, int len){
       int* arr = (int*)malloc(sizeof(int)*len);
       for(int i = 0; i < len; ++i) {
            arr[i] = rand() % (max-min+1) + min;
      }
      return arr;
}

一、冒泡排序

算法原理:

比較兩個相鄰的元素胆屿,將值大的元素右移。

算法思路:

首先第一個元素和第二個元素比較偶宫,如果第一個大非迹,則二者交換,否則不交換纯趋;然后第二個元素和第三個元素比較憎兽,如果第二個大,則二者交換吵冒,否則不交換……一直執(zhí)行下去纯命,最終最大的那個元素被交換到最后,一趟冒泡排序完成痹栖。最壞的情況是排序是逆序的亿汞。

算法過程:
image.png
{1}{68,35,70,25,79,59,63,65}
{1,25}{68,35,70,79,59,63,65}
算法實現(xiàn):
void bubbleSort(int* arr,int len){
    int t;
    for (int i = 0; i < len - 1; i++)
    {   
        for (int j = 0; j < len - 1 - i; ++j){
            if (arr[j] > arr[j+1])
            {       
                    t = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = t;
            }
        }
    }
}

插入排序

原理:基本思想是:通過一趟排序將要排序的數(shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小揪阿,然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序

栗子:我們有一個數(shù)組 arr[10] = {42,68,35,1,70,25,79,59,63,65};

思路:第一次循環(huán)
arr[0] 42與arr[1]比較 42 < 68 last不變
42 68 35 1 70 25 79 59 63 65
arr[0] 42與arr[2]比較 42 > 35 這時候讓arr[1]與arr[2]互換 last自增 數(shù)組:
42 35 68 1 70 25 79 59 63 65
以此類推
42 35 1 68 70 25 79 59 63 65
42 35 1 68 70 25 79 59 63 65
42 35 1 25 70 68 79 59 63 65
42 35 1 25 70 68 79 59 63 65
42 35 1 25 70 68 79 59 63 65
42 35 1 25 70 68 79 59 63 65
42 35 1 25 70 68 79 59 63 65
當結束循環(huán) arr[last] 與 原本的互換
25 35 1 42 70 68 79 59 63 65

void swap(int* arr, int l, int r) {
        int tmp = arr[l];
        arr[l] = arr[r];
        arr[r] = tmp;
}
void QuickSort(int* arr ,int left, int right){
    if(left >= right)   // 若數(shù)組包含的元素少于兩個
        return ;
    int last = left;    // 設左邊元素為子集劃分元素
    for(int i= left + 1; i<= right; i++){ // 劃分子集
        if(arr[i] < arr[left]){
            swap(arr, ++last, i);  // index 跟
        }
        printf("%d %d %d\n",i, arr[i],arr[left]);
        //printArray(arr,10);
    }   
    swap(arr, left, last);          //回復劃分子集的元素
    QuickSort(arr,left,last-1);
    QuickSort(arr,last+1,right);    
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末留夜,一起剝皮案震驚了整個濱河市匙铡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碍粥,老刑警劉巖鳖眼,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嚼摩,居然都是意外死亡钦讳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門枕面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愿卒,“玉大人,你說我怎么就攤上這事潮秘∏砜” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵枕荞,是天一觀的道長柜候。 經(jīng)常有香客問我,道長躏精,這世上最難降的妖魔是什么渣刷? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮矗烛,結果婚禮上辅柴,老公的妹妹穿的比我還像新娘。我一直安慰自己瞭吃,他們只是感情好碌嘀,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歪架,像睡著了一般股冗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牡拇,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音穆律,去河邊找鬼惠呼。 笑死,一個胖子當著我的面吹牛峦耘,可吹牛的內(nèi)容都是我干的剔蹋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辅髓,長吁一口氣:“原來是場噩夢啊……” “哼泣崩!你這毒婦竟也來了少梁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤矫付,失蹤者是張志新(化名)和其女友劉穎凯沪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體买优,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡妨马,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杀赢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烘跺。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脂崔,靈堂內(nèi)的尸體忽然破棺而出滤淳,到底是詐尸還是另有隱情,我是刑警寧澤砌左,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布脖咐,位于F島的核電站,受9級特大地震影響绊困,放射性物質(zhì)發(fā)生泄漏文搂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一秤朗、第九天 我趴在偏房一處隱蔽的房頂上張望煤蹭。 院中可真熱鬧,春花似錦取视、人聲如沸硝皂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稽物。三九已至,卻和暖如春折欠,著一層夾襖步出監(jiān)牢的瞬間贝或,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工锐秦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咪奖,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓酱床,卻偏偏與公主長得像羊赵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扇谣,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

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