? ? ? 冒泡排序法是一種簡(jiǎn)單的排序算法,它重復(fù)地走訪過要排序的數(shù)組,一次比較兩個(gè)元素矫膨,如果他們的順序錯(cuò)誤就把他們交換過來期奔。走訪數(shù)組的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換呐萌,也就是說該數(shù)組已經(jīng)排序完成。
一肺孤、冒泡排序的原理:
1济欢、排序時(shí),先通過元素進(jìn)行比較找出最大數(shù)小渊,如果是升序就放在最后法褥,降序就放在首位。
2酬屉、多少個(gè)數(shù)進(jìn)行排序半等,外層for循環(huán)就循環(huán)多少次。
3梆惯、內(nèi)層for循環(huán)表示比較的次數(shù)酱鸭。例如:有6個(gè)數(shù)排序:2吗垮,5垛吗,6,7烁登,8,4饵沧。
(1)找出6個(gè)數(shù)中最大的數(shù)锨络,我們就需要比較5次? ? ?//6-1
(2)找出6個(gè)數(shù)中第二打的數(shù),我們就需要比較4次狼牺。//6-2
? ?......直到最后我們找到最小的數(shù)羡儿,這時(shí)比較的次數(shù)就是排序數(shù)的個(gè)數(shù)-找第幾大的數(shù)。
二是钥、冒泡排序的語法
升序:
? ? ? ? ? ? ? ? ? ? ? int[] a={9,8,7,5,4,6,2,3,1};
? ? ? ? ? ? ? ? ? ? ?for (int i = 1; i < a.length; i++) {? ? ? ? ?//外層for循環(huán)掠归,表示循環(huán)9次
? ? ? ? ? ? ? ? ? ? ? ? ? for (int j = 1; j <=a.length-i; j++) {? ?//內(nèi)層for循環(huán),表示找第幾個(gè)數(shù)所需要比較的次數(shù)悄泥,如找第一個(gè)數(shù)需要比較5次虏冻,找第二個(gè)數(shù)需要4次......
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(a[j-1]>a[j]){? ? ? ? ? ? ?//兩個(gè)元素進(jìn)行判斷,實(shí)現(xiàn)兩個(gè)數(shù)調(diào)換位置弹囚。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int tmp=a[j-1];? ? ? //定義tmp用于臨時(shí)存放兩元素中最大的那個(gè)厨相。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?a[j-1]=a[j];? ? ?//a數(shù)組中前面的數(shù)賦值小的那個(gè)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a[j]=tmp;? ? ?//a數(shù)組中后面的數(shù)賦值tmp的值鸥鹉,實(shí)現(xiàn)升序排列蛮穿。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ?}
降序:
int[] b={9,8,7,5,4,6,2,3,1};
for (int i = 1; i < a.length; i++) {
? ? ? ? ? ? ? ?for (int j = 1; j < a.length-i; j++) {
? ? ? ? ? ? ? ? ? ? ?if(b[j-1]<b[j]){? ? ? ? ? ? ?//判斷兩個(gè)元素的值大小,實(shí)現(xiàn)兩個(gè)元素的值互換毁渗。
? ? ? ? ? ? ? ? ? ? ? ? ? int tmp=b[j-1];? ? ?//定義一個(gè)tmp變量存放較小的值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?b[j-1]=b[j];? ? ? ? //把較大的值賦給前面的元素
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? b[j]=tmp;? ? ? ? ?//把tmp中的值賦給后面的元素绪撵,實(shí)現(xiàn)降序排列。
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ?}
? ?}