演算法設計與分析基礎 26 在寫快排

2022-07-29 18:45:07 字數 2436 閱讀 3763

我真是服了。。。。一段時間沒用,快排都不會了,實打實寫了半天,細細回想一下為什麼會寫那麼久寫不出來???

1.沒有吧概念理解清楚就開始動**,致命錯誤

2.無法準確明白前後遍歷索引終止位置

3.習慣重低位向高位進行索引,導致中間索引位置和真正的中間位置相差一位,因為我們比較的時候,是按照從小到大的順序排序的,並且我們比較都是》=或者<= 問題就在這個等於上,因為我們等於的時候還是會進行索引的++

那麼就導致是從上往下合併還是從下往上合併,如果是從下往上合併的話,那麼先遍歷小的,在等於我們中間資料的時候,我們還會再走一趟,那麼就會導致索引所在位置會比之前的位置大一位

哎。。。。

還差的遠啊,加油啊

這裡其實是在做另外一道筆試題的時候,用到了排序,於是想用一下快排,好久沒寫了,結果悲劇了。。。。

算了發出來,筆試其實不麻煩,麻煩的是這個快排。。。

package

y2019.m03.d13;

import

y2019.m03.d13.vo.roomvo;

/*** @projectname: cutter-point

* @package: y2019.m03.d13

* @classname: buildroom

* @author: xiaof

* @description:

* 題目:

* 為解決城中村改造問題並解決市民的住房困難,**決定在城郊區域建造一批安居房。工程進行的比較順利,已經有n套方形的房屋建好了。所有的房子都在街道的一側,中心位於x軸上,

* 牆壁與座標軸平行。任何兩個房子之間沒有重疊,但可以公用鄰接的牆壁以節省開支。由於負責建設這批安居房的公司出現了問題,小b所在的公司負責接手後續房子的建設工作。

* 客戶希望房子能夠和其他房子一樣位於x軸上,並且也是方形的,邊長為t,牆壁與座標軸平行,且至少與乙個已經建好的房子毗鄰。由於還不熟悉情況,

* 她希望你能幫她找出還有多少位置可以開展新房建設工作。

* * 輸入中有多組測試資料。每組測試資料的第一行為空格分隔的兩個整數nn和t(1=*/

public

class

buildroom

//交換位置

if(low

//如果沒有碰頭,那麼就依次比較交換位置

while(low < high && data[low].getx() <=key)

//交換位置

if(low

}quiksortforroom(data, start, high - 1);

quiksortforroom(data, high + 1, end);

}public

static

void

printdata(roomvo data)

system.out.println();

}public

static

void swap(roomvo data, int i, int

j)

/***

* @program: y2019.m03.d13.buildroom

* @description: 這個題我的理解是,再乙個x座標上建房子,不同的房子的中心點座標不同,邊長不同,現在要建新房子,每個房子的邊長都是t,現在需要排除間隔在t以上的位置,

* 並判斷間隔能建幾個位置

* @auther: xiaof

* @date: 2019/3/13 9:18

*/public

static

int selectroomsite(int

roomsites)

}

package

y2019.m03.d13.vo;

/*** @projectname: cutter-point

* @package: y2019.m03.d13.vo

* @classname: roomvo

* @author: xiaof

* @description: $

* @date: 2019/3/13 9:21

* @version: 1.0 */

public

class

roomvo

public

void setx(int

x)

public

intgeta()

public

void seta(int

a) }

測試**:

@test

public

void

test4()

結果:

這裡會輸出每一次交換的時候變動

演算法設計與分析基礎 分治法

1.將乙個問題劃分為同一型別的若干子問題,子問題最好規模相同 2.對子問題求解 一般使用遞迴方法 3.有必要的話,合併子問題的解,得到原始問題的答案 下圖描述的是將乙個問題劃分為兩個較小子問題的例子,也是最常見的情況 1.主要思想 對於乙個需要排序的陣列a 0 n 1 將其一分為二 a 0 n 2 ...

演算法分析與設計 演算法及效率分析基礎(一)

1 演算法 解決問題的一種方法或乙個過程,是乙個由若干運 算或指令組成的有窮序列 2 演算法 問題 求解問題的演算法可以看作是輸入例項與輸出之間的函式 3 演算法的特點 input,output 輸入,輸出 deterministic 確定性 feasible 可行性 finite 有窮性 1 正確...

演算法設計與分析基礎3 貪心演算法

遞迴與分治演算法動態規劃貪心演算法回溯演算法貪心演算法的特徵是最優子結構性質和貪心選擇性質。最優子結構性質 原問題的最優解包含著子問題的最優解。貪心選擇性質 問題整體的最優解是通過一系列區域性的最優選擇得到的,這種選擇叫做貪心選擇。貪心選擇可以依賴於已經做過的選擇,但是絕對不會依賴於將來的選擇,也不...