最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

編程每日刷題系列七(快速排序)

2021-02-15 13:52 作者:Eric_Richard  | 我要投稿

快速排序

排序在各種場(chǎng)合經(jīng)常被用到??焖倥判蚴鞘殖S玫母咝实乃惴?。


其思想是:先選一個(gè)“標(biāo)尺”,用它把整個(gè)隊(duì)列過(guò)一遍篩子,以保證:其左邊的元素都不大于它,其右邊的元素都不小于它。這樣,排序問(wèn)題就被分割為兩個(gè)子區(qū)間。再分別對(duì)子區(qū)間排序就可以了。


下面的代碼是一種實(shí)現(xiàn),請(qǐng)分析并填寫(xiě)劃線部分缺少的代碼。

#include <stdio.h>


void swap(int a[], int i, int j)

{

int t = a[i];

a[i] = a[j];

a[j] = t;

}


int partition(int a[], int p, int r)

{

? ? int i = p;

? ? int j = r + 1;

? ? int x = a[p];

? ? while(1){

? ? ? ? while(i<r && a[++i]<x);

? ? ? ? while(a[--j]>x);

? ? ? ? if(i>=j) break;

? ? ? ? swap(a,i,j);

? ? }

______________________;

? ? return j;

}


void quicksort(int a[], int p, int r)

{

? ? if(p<r){

? ? ? ? int q = partition(a,p,r);

? ? ? ? quicksort(a,p,q-1);

? ? ? ? quicksort(a,q+1,r);

? ? }

}

? ??

int main()

{

int i;

int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};

int N = 12;


quicksort(a, 0, N-1);


for(i=0; i<N; i++) printf("%d ", a[i]);

printf("\n");


return 0;

}

注意:只填寫(xiě)缺少的內(nèi)容,不要書(shū)寫(xiě)任何題面已有代碼或說(shuō)明性文字。

還原后的代碼:

所以劃線處應(yīng)該填:

swap(a, p, j);

有人就會(huì)問(wèn),為什么i不可以,就是填swap(a, p,?i);

這個(gè)很簡(jiǎn)單,因?yàn)槲覀円捎糜|發(fā)點(diǎn)來(lái)作為交換點(diǎn),--j是最近的代碼,++i是循環(huán)開(kāi)始就執(zhí)行的代碼,自然結(jié)果是因?yàn)閖的操作而導(dǎo)致結(jié)果i >= j發(fā)生,也就是說(shuō)j是主元,所以我們選擇swap(a, p, j);而不是swap(a, p,?i);

如果還沒(méi)弄懂,我就再舉個(gè)例子吧

單次快排
快排框架

很顯然,這里最后是用主元left作為交換點(diǎn)

之后我會(huì)持續(xù)更新,如果喜歡我的文章,請(qǐng)記得一鍵三連哦,點(diǎn)贊關(guān)注收藏,你的每一個(gè)贊每一份關(guān)注每一次收藏都將是我前進(jìn)路上的無(wú)限動(dòng)力 ?。?!↖(▔▽▔)↗感謝支持!



編程每日刷題系列七(快速排序)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
瑞昌市| 依安县| 娱乐| 台安县| 边坝县| 游戏| 丹阳市| 丘北县| 阿城市| 成武县| 长顺县| 砀山县| 招远市| 巴青县| 沾益县| 绥滨县| 永济市| 饶河县| 曲麻莱县| 泰顺县| 饶平县| 安多县| 海阳市| 皋兰县| 思茅市| 巨野县| 新营市| 甘洛县| 桃江县| 乐安县| 平利县| 当涂县| 金川县| 平江县| 沈阳市| 达拉特旗| 舟曲县| 保定市| 海南省| 阿拉善右旗| 玉林市|