排序整理

#include<iostream>
#include<string>
#include<cstring>
#include<stdlib.h>
using namespace std;
void swap(int *a,int *b){
    int k = *a;
    *a = *b;
    *b = k;
}
//直接插入排序
void insertSort(int *a,int len){
    for(int i=1;i<len;i++){
        int temp = a[i];
        int j = i-1;
        for(;j>=0;j--){
            if(temp<a[j])
                a[j+1] = a[j];
            else 
                break;
        }
        a[j+1] = temp;
    }
} 
//選擇排序 
void selectSort(int *a,int len){
    for(int i=0;i<len-1;i++){
        int k = i;
        for(int j=i+1;j<len;j++){
            if(a[j]<a[k])
                k = j;
        }
        swap(&a[i],&a[k]);
    }
}
//冒泡排序
void bubbleSort(int *a,int len){
    for(int i=0;i<len-1;i++){
        for(int j=0;j<len-1-i;j++){
            if(a[j]>a[j+1])
                swap(&a[j],&a[j+1]);
        }
    }
}
//歸并排序
//遞歸
void merge(int *a,int left,int mid,int right,int *b){
    int i = left;
    int j = mid +1 ;
    int k = 0;
    while(i<=mid&&j<=right){
        if(a[i]<a[j]){
            b[k++] = a[i++];
        }else{
            b[k++] = a[j++];
        }
    }
    while(i<=mid){
        b[k++] = a[i++];
    }
    while(j<=right){
        b[k++] = a[j++];
    }
    k = 0;
    while(left <= right){
        a[left++] = b[k++];
    }
}
void mergeSort(int *a,int left,int right,int *b){
    if(left<right){
        int mid = left + (right - left)/2;
        mergeSort(a,left,mid,b);
        mergeSort(a,mid+1,right,b);
        merge(a,left,mid,right,b);
    }
}

//歸并排序
//迭代
void mergeSort(int *a,int len,int *b){
    int r,rm,l,lm,t;
    for(int i=1;i<len;i*=2){
        for(l=0;l<len-1;l=rm){
            t = 0;
            lm = l + i;
            r = lm;
            rm = r + i;
            if(rm>len)
                rm = len;
            while(r<rm&&l<lm){
                if(a[l]>a[r]){
                    b [t++] = a[r++];
                }else{
                    b[t++] = a[l++];
                }
            }
            while(r<rm){
                b [t++] = a[r++];
            }
            while(l<lm){
                b[t++] = a[l++];
            }
            while(t>0){
                a[--r] = b[--t];
            }
        }
    }
}

//快速排序
//遞歸 
void quickSort(int *a,int left,int right){
    if(left>=right)
        return;
    int i,j,temp;
    i = left;
    j = right;
    temp = a[left];
    while(i<j){
        while(a[j]>=temp&&i<j)
            j--;
        while(a[i]<=temp&&i<j)
            i++;
        if(i<j)
            swap(&a[i],&a[j]);
    }
    a[left] = a[i];
    a[i] = temp;
    quickSort(a,left,i-1);
    quickSort(a,i+1,right);
} 
//快速排序
//迭代
void quickSort2(int *a,int len){
    int *stack  = (int*)malloc(len*sizeof(int));
    int top = -1;
    stack[++top] = 0;
    stack[++top] = len-1;
    while(top!=-1){
        int high = stack[top--];
        int low = stack[top--];
        while(low<high){
            int i = low;
            int j = high;
            int temp = a[i];
            while(i<j){
                while(a[j]>=temp&&i<j)
                    j--;
                while(a[i]<=temp&&i<j)
                    i++;
                    if(i<j)
                        swap(&a[i],&a[j]);
            }
            a[low] = a[i];
            a[i] = temp;
            if(i-low<high-i){
                stack[++top] = i +1;
                stack[++top] = high;
                high = i - 1;
            }else{
                stack[++top] = low;
                stack[++top] = i -1;
                low = i + 1;
            }
        }
    }
} 
void mergeSort(int *a,int len,int flag){
    int *b = (int*)malloc(len*sizeof(int));
    switch(flag){
        case 0:
            mergeSort(a,0,len-1,b);
            break;
        case 1:
            mergeSort(a,len,b);
            break;  
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末装盯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子与境,更是在濱河造成了極大的恐慌验夯,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摔刁,死亡現(xiàn)場離奇詭異挥转,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)共屈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門绑谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拗引,你說我怎么就攤上這事借宵。” “怎么了矾削?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵壤玫,是天一觀的道長。 經(jīng)常有香客問我哼凯,道長欲间,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任断部,我火速辦了婚禮猎贴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝴光。我一直安慰自己她渴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布蔑祟。 她就那樣靜靜地躺著趁耗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疆虚。 梳的紋絲不亂的頭發(fā)上对粪,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音装蓬,去河邊找鬼著拭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛牍帚,可吹牛的內(nèi)容都是我干的儡遮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼暗赶,長吁一口氣:“原來是場噩夢啊……” “哼鄙币!你這毒婦竟也來了肃叶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤十嘿,失蹤者是張志新(化名)和其女友劉穎因惭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绩衷,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹦魔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咳燕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勿决。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖招盲,靈堂內(nèi)的尸體忽然破棺而出低缩,到底是詐尸還是另有隱情,我是刑警寧澤曹货,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布咆繁,位于F島的核電站,受9級(jí)特大地震影響顶籽,放射性物質(zhì)發(fā)生泄漏么介。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一蜕衡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧设拟,春花似錦慨仿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跑慕,卻和暖如春万皿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背核行。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工牢硅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芝雪。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓减余,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惩系。 傳聞我的和親對象是個(gè)殘疾皇子位岔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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

  • 1. 冒泡排序 2. 選擇排序 3. 快速排序 4. 插入排序 5. 二分法排序 時(shí)間復(fù)雜度log(N)
    螞蟻窩大夢想閱讀 221評(píng)論 0 3
  • 畢業(yè)久了如筛,越是基礎(chǔ)的東西忘得越徹底,最近也是趁著有時(shí)間抒抬,趕緊將這些補(bǔ)一補(bǔ)杨刨。說到堆排序,是這些排序算法中最后一個(gè)重新...
    零響閱讀 360評(píng)論 0 0
  • 八大排序算法 算法分析 1. 直接插入排序: 在遍歷數(shù)組元素的時(shí)候擦剑,當(dāng)前元素 array[i] 從當(dāng)前位置從右向左...
    LdpcII閱讀 284評(píng)論 0 0
  • 冒泡:相鄰元素對比妖胀,從數(shù)組后方開始兩兩對比 冒泡排序是最簡單的排序之一了,其大體思想就是通過與相鄰元素的比較和交換...
    vivi_wong閱讀 561評(píng)論 0 1
  • 最近公司需要用到一個(gè)定位功能抓于,其中有一個(gè)A-Z的對全國城市的排序列表做粤,網(wǎng)上找了資源,不是亂的捉撮,就是錯(cuò)的怕品,特意自己整...
    BoASir閱讀 2,584評(píng)論 0 2