演算法設計與分析 第四節課 分治演算法

2021-09-27 12:44:54 字數 3170 閱讀 4268

利用遞迴和分治的思想,對陣列:a=進行快速排序

快速排序的思想

取陣列的第乙個作為參考標準比較

將陣列中的其它數與之比較,比它大的數和第它小的數,放到原陣列的前半部分和後半部分

然後運用遞迴的思想對前後兩部分進行快速排序

分治的標準:對應每次排序的陣列第乙個下標值

舉例:a= a2=, a={3,1,2,4,5,8,6}

4. 第二輪,開始遞迴:a1以3為標準,a2以5為標準,繼續分割為a3,a4,a5,a6

**:

#include

intpartition

(int a,

int s,

int t)

a[i]

=tmp;

//兩下標不斷靠攏直到i=j,再講比較值插入中間a[i]

return i;

//返回陣列中間下標,好進行下一輪的劃分

}void

quicksort

(int a,

int s,

int t)

//傳入陣列 ,及陣列的起始下標

}int

main()

;printf

("排序之前的陣列為");

for(

int i=

0;i<=

9;i++

)printf

("%d "

,a[i]);

printf

("%\n");

quicksort

(a,0,9

);printf

("排序之後的陣列為");

for(

int i=

0;i<=

9;i++

)printf

("%d "

,a[i]);

}

對陣列:a=進行歸併排序

解法1:遞迴法

歸併排序的遞迴法思想

1. 分割:將乙個陣列從中中間下標處不斷分割,遞迴直到不可分割為止,以最大下標和最小下標的和的一半為標準,向下取整

2. 排序、合併:對分割的部分排序,然後將其合併

3. 遞迴:然後迴圈此過程,不斷的排序合併

4. 分治的標準:陣列中間下標

舉例:a=

分割 .,,,

排序,合併(遞迴2次)

,

#include

#include

void

merge

(int a,

int low,

int mid,

int high)

else

//然後將剩下沒有裝入陣列中得部分,按順序裝入tmpa陣列中

while

(i<=mid)

while

(j<=high)

//重新排列好後將所有的數加入到a陣列中,釋放掉臨時陣列tmpa

for(k=

0,i=low;i<=high;k++

,i++

) a[i]

=tmpa[k]

;free

(tmpa);}

void

mergesort

(int a,

int low,

int high)

//排序主體

}int

main()

;printf

("排序之前的陣列為");

for(

int i=

0;i<=

9;i++

)printf

("%d "

,a[i]);

printf

("%\n");

mergesort

(a,0,9

);printf

("排序之後的陣列為");

for(

int i=

0;i<=

9;i++

)printf

("%d "

,a[i]);

}

解法2:非遞迴法

歸併排序非遞迴思想

每一次以2指數次方增長進行排序,將多餘的數單獨排序

舉例 a=

以2劃分:,

以4劃分:,

以8劃分:

**

#include

#include

void

merge

(int a,

int low,

int mid,

int high)

else

while

(i<=mid)

//將另乙個沒放完的陣列放入資料

while

(j<=high)

for(k=

0,i=low;i<=high;k++

,i++

)//最後將資料轉入a陣列,釋放臨時指標

a[i]

=tmpa[k]

;free

(tmpa);}

void

mergepass

(int a,

int length,

int n)

void

mergesort

(int a,

int n)

//排序輸入陣列,及陣列長度

intmain()

;printf

("排序之前的陣列為");

for(

int i=

0;i<=

9;i++

)printf

("%d "

,a[i]);

printf

("%\n");

mergesort

(a,10);

printf

("排序之後的陣列為");

for(

int i=

0;i<=

9;i++

)printf

("%d "

,a[i]);

}

C 第四節課

知識點 三種屬性,using改變許可權,繼承時名字的遮蔽,函式過載的遮蔽問題,派生類的建構函式,多繼承類,命名衝突,虛繼承,多繼承的建構函式,在基類中,基類的public,protected private 成員都是可以訪問的,但是類的物件只能訪問public成員 public繼承 基類的publi...

學習python第四節課

基礎資料概念 資料型別指的就是變數的值的型別,也就是可以為變數賦哪些值 整數和小數 整數 所有整數 例如 a 1 b 100 c 999 都是int型別 小數常量 所有小數 例如 a 1.2 b 6.66 用float型別表示 字串是由數字 字母 下劃線組成的一串字元 注意 單引號和雙引號不能混合使...

軟體測試第四節課總結

1 netware 作業系統 工業網際網路 基於文字介面 沒趕上圖形介面 被淘汰 windows基於tcp ip,剛開始不穩定,但搶占了先機,靠使用者反饋資訊,現在ubuntu走的就是這條路 2 黑盒測試方法 邊界值 等價類劃分 正交測試 對偶組合測試 因果圖測試 白盒測試 塊測試 語句覆蓋 判定覆...