冒泡排序——面試會經常被問到

1.實例代碼

<span style="font-size:24px;">#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void main()
{
	int num,temp,h,arr[20];
        srand (time(0));
	for (</span><span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;">num</span><span style="font-size:24px;">=0;num<20;num++){
		arr[num]=rand();//產生20個隨機數printf("%d ",arr[num]);
	}
        for (num=0;num<19;num++)
		for (h=0;h<19-num;h++){
		   if (arr[h]>arr[h+1]){
			temp=arr[h];
			arr[h]=arr[h+1];
			arr[h+1]=temp;
		   }
	        }
	for (num=0;num<20;num++){
		printf ("%d ",arr[num]);//將排序後的20個數打印出來
	}
}</span>

2.冒泡排序原理

冒泡排序算法的運作如下:(這是百度百科上面的解釋)
  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

我的解釋:根據我上面的實例代碼,arr[20]中共有20個無序的隨機數,冒泡排序就是通過19次循環,第1次循環比較arr[0]到arr[19]這20個數,找到最大的數放在arr[19]中(不再比較),第2次循環,比較arr[0]到arr[18]這19個數,找到最大的數放在arr[18]中(不再比較),第3次循環,比較arr[0]到arr[17]這18個數,找到最大的數放在arr[17]中(不再比較)................,第19次循環,比較arr[0]到arr[1]這2個數,找到最大的數放在arr[1]中,小的那個數放在arr[0]中,這樣冒泡排序就結束了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章