Day20 冒泡 快速 選擇 插入 二分查詢

2021-07-22 01:32:17 字數 2845 閱讀 7706

演算法:

演算法是用來解決常見問題的方法

同乙個問題可以採用多種方法解決,不同的方法適用於不同的環境

排序指的是把一組數字按照某種順序排列好

排序演算法分很多次執行,每次負責把乙個數字放在合適的位置上

為了實現以上效果,可以先確定數字然後查詢位置,也可以先確定位置再查詢數字

通過不斷調整兩個數字的相互順序,最終把合適的數字放在合適的位置上

1、

氣泡排序演算法

根據位置找數字,先確定位置,再把合適的數字填進去

每次把乙個數字放在最前邊或最後邊的位置上

不斷調整相鄰兩個數字的順序最終把乙個數字放在最前或最後的位置上

34 12 75 43 2755 68   按從小到大的順序排列

經過一次處理把最大的數放在最後面

12 34 75 43 27 55 68   每次處理相鄰的位置

12 34 75 43 27 55 68

12 34 43 75 27 55 68

12 34 4327 75 55 68

12 34 43 27 55 75 68

12 34 43 27 55 68 75

1#include

2 voidbubble_sort(int *p_num,int size)

17         }

18     }

19 }

20 int main();

23     bubble_sort(arr,9);

2、

選擇排序演算法

每次把乙個數字放在最前邊或最後邊

用選定位置裡的數字和所有其他數字做順序調整,最終把合適的數字放在這個位置裡

拿最後的數字與每個數字進行比較

34 12 75 43 27 5568

34 12 75 43 27 55 68

34 12 68 43 27 55 75

34 12 68 43 27 55 75

34 12 68 43 27 55 75

34 12 68 43 27 5575

34 12 68 43 27 55 75

34 12 68 43 27 55 75

34 12 68 43 27 55 75

34 12 55 43 27 68 75

1#include

2 voidchoice_sort(int *p_num,int size)

13         }

14     }

15 }

16 int main();

19     choice_sort(arr,9);

20     for(num=0;num<=8;num++)

23     printf("\n");

3、

插入排序演算法

把沒有排好序的數字中最前面或最後面的數字插入到排好序的數字中合適的位置上

重複這個過程,直到把所有數字都放在合適的位置上

每次把要插入的數字和它前面或後面的數字進行順序調整,重複這個過程直到它被放在合適的位置上

例:12 23 34 45 16 27 31   把16插到前面排好序的數字中合適的位置

12 26 34 16 45 27 31

12 26 16 34 45 27 31

12 16 36 34 45 27 31

12 16 36 34 27 45 31

1 #include

2 void insert_sort(int*p_num,int size)

13             else

16         }

17     }

18 }

19 int main();

22     insert_sort(arr,9);

23     for(num=0;num<=8;num++)

26     printf("\n");

27     return 0;

28 }

ps:12  |  23   34    45    16    27

num(開始)

12    23    34   45  |  16     27

|  num 

12    23   34    16  |  45     27

num1 | num1+1

練習:上述方法是把最大的數字依次放在後面,現在把最小的數字依次放在前面

用冒泡和選擇實現:

冒泡

void bubble_sort(int *p_num,int size)// 此時才把乙個數字放在了合適的位置

//(左邊的數都比基準數字小,右邊的數都比基準數字大)

quick_sort(p_num,p_start-p_num);//上面迴圈結束後p_start和p_end都指向基準數字

//對基準數字左邊的數遞迴,重複以上過程

quick_sort(p_start+1,p_num+size-1-p_start);

//對基準數字右邊的數遞迴,重複以上過程

int main();

quick_sort(arr,9);

for(num=0;num<=8;num++);

p_num=half_search(arr,8,44);  //函式指標

if(p_num){

printf("查詢結果是%d\n",*p_num);

return 0;

冒泡 選擇 插入 快速 二分查詢

氣泡排序 時間最優 o n 最壞o n2 穩定 def bubble alist n len alist for j in range n 1 for i in range n 1 j if alist i alist i 1 alist i alist i 1 alist i 1 alist i ...

二分 冒泡 選擇 插入排序

從有序列表的候選區data 0 n 開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。示例 使用二分查詢3 二分查詢 def bin search data set,val low 0 high len data set 1 while low high mid low high 2...

氣泡排序,選擇排序,插入排序,快速排序,二分查詢

氣泡排序 相鄰比較 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。選擇排序 找最小...