1. 程式人生 > >詳解氣泡排序--適用於初學者,包會

詳解氣泡排序--適用於初學者,包會

1.氣泡排序的基本思想就是:每次都比較兩個相鄰的元素,如果他們的順序錯誤就把他們的位置調換過來 2.例如 5 9 7 6 1 8 13 4 他們每次都是兩兩比較,所以每一輪要比較n-i次(升續排列每次都會確定一個剩餘元素中最大的一個;反之,每次都會確定一個剩餘元素中最大的一個)。總共有n個元素要比較n-1輪;(這個都理解吧,不理解的可以自己每兩個比較一下試試)。 下面預設升續 第一輪: i=1,比較8-1=7次;先比較5和9,他們的順序沒有錯誤,不動; 再比較9和7,發現順序錯誤,把9和7的位置交換,這樣前三個數字的順序就變成了5,7,9; 接著9和6比較,發現順序錯誤,把9和6的位置交換,
這樣前三個數字的順序就變成了5,7,6,9;
下面依次類推。。最後的順序就變成了5,7,6,1,8,9,4,13;確定了序列中的最大元素。 第二輪; i=2,比較8-2=6次;和第一輪一樣,依次兩兩比較,最後確定序列第二大的9的位置。 。。。。。 最後一輪:確定了序列的升續排列1,4,5,6,7,8,9,13; 下面來張圖例(百度而來)
模板程式碼
#include <stdio.h>
#include <string.h>

using namespace std;
int main()
{
	int a[1000];
	int i, j, n;
	while(~scanf("%d", &n))
	{
		memset(a, 0, sizeof(a));
		for(i = 1; i <= n; i++)
			scanf("%d", a + i);
		for(i = 1; i <= n-1; i++)//比較n-1趟 
			for(j = 1; j <= n-i; j++)//每次比較相鄰的兩個元素,比較前n-i次 
			{
				if(a[j] < a[j+1])//小於號從大到小排序 ,大於號從小到大排序 
				{
					int t = a[j];//陣列中的值為變數j
					a[j] = a[j + 1];
					a[j + 1] = t;
				}
			}
			
		for(i = 1; i <= n; i++)
			printf("%d ", a[i]);
	}
	return 0;
 } 

純手打,學明白的,點個贊獎勵一下啦!! 不是很理解的,可以給我留言,我看到的話會回覆的! 共同學習,有什麼錯誤,希望一起交流,謝謝!