1. 程式人生 > >算法_冒泡程序

算法_冒泡程序

__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真的很難適應,不過總會適應的,一起加油把

算法_冒泡程序