算法_冒泡程序
阿新 • • 發佈:2018-02-03
__main__ 不知道 理解 什麽 num main pri printf %d
這裏的第一個算法,沒什麽可以說的,一定是從最經典的冒泡算法開始,會列出python版和c版
冒泡算法很簡單,就是像冒泡一樣,把小的,也可以理解成輕的,從下面浮出來
比如有個list = [3,2,5,4,1],先用3和2比,2輕,2浮上去,3沈下去,3再和5比,3比較輕,位置不變,5和4比,4浮上來,5和1比,1浮上來
第一次比完,得到[2,3,4,1,5],再進行第二次,第三次,直到把沒有可以浮的了,就結束,通常這個算法的版本是嵌套循環,就是for for,好像掉進這個圈出不來了,其實不用全部比一遍,如果list初始就是[2,1,3,4,5],其實只要第一次就可以得到結果了,後面不是無用功麽
好了,閑話不多,上代碼,邊嗑瓜子,邊喝茶,邊看代碼,人生一大幸事啊
偽代碼
序列 = [3,2,5,4,1] 循環序列 標記初始化,直到標記沒有變化,就結束循環 如果第一個>第二個 第二個和第一個換位置 標記值變化,記錄有變化了 回到頭,重新循環
python版
#!/usr/bin/python # coding: UTF-8 def bubble_sort(num_list): num_len = len(num_list) while True: n = 0 ‘‘‘range這裏-1是因為下面的+1,如果不-1,下面+1後會報out of range錯誤,而且從算法來說最多查找len(list) - 1次,因此這個是沒問題的‘‘‘ for i in range(num_len-1): if num_list[i] > num_list[i+1]: num_list[i],num_list[i+1] = num_list[i+1],num_list[i] #交換位置 n += 1 if n == 0: break return num_list if __name__ == ‘__main__‘: num_list = [3,2,5,4,1] print num_list num_list = bubble_sort(num_list)print num_list
c版
#include <stdio.h> int main() { int num[] = {3,2,5,4,1}; int i,num_len1; num_len1 = sizeof(num)/4; //這個sizeof的結果是20,我也不知道咋算的,不是說一個數字占1bit$ bubble_sort(num,num_len1); for(i=0; i<num_len1; i++) { printf("%d \n", num[i]); } return 0; } int bubble_sort(int num_list[],int num_len) { int i; while(1) { int n = 0; for(i=0;i<(num_len-1);i++) { if(num_list[i] > num_list[i+1]) { int temp = num_list[i]; num_list[i] = num_list[i+1]; num_list[i+1] = temp; n++; } } if(n == 0) { break; } } return 0; }
不得不說,c真的很難適應,不過總會適應的,一起加油把
算法_冒泡程序