Java中的冒泡排序是如何實(shí)現(xiàn)的
謝邀。冒泡排序還是比較好理解的,主要是要理解其核心思想。如果從小到大排序,每一輪排序就找出未完成排序序列中的最大值,然后放在最后,直到排序完成為止。
(冒泡排序過程及結(jié)果展示)
一般而言,冒泡排序有以下步驟:
設(shè)數(shù)組長度為N,比較前后相鄰的兩個(gè)數(shù)據(jù),如果前值大于后值,就將這兩個(gè)值交換。
重復(fù)以上步驟,從第0個(gè)數(shù)據(jù)到N-1個(gè)數(shù)據(jù)進(jìn)行遍歷,最大值就會(huì)沉在下方。
以上就是冒泡排序的基本思想,按照這個(gè)定義很快就能寫出代碼:
測試代碼:
運(yùn)行結(jié)果如下:
0,1,1,2,3,3,4,7,8,9,12,22,65當(dāng)然,如果序列本身有一部分是有序序列,或者本來就排序已經(jīng)完成,那么遍歷會(huì)帶來不少開銷,可以設(shè)置一個(gè)布爾值進(jìn)行開關(guān)操作。如果已經(jīng)完成排序,那么中止遍歷,如果未完成,繼續(xù)遍歷。
如果你對(duì)學(xué)習(xí)人工智能和科技新聞感興趣,可以訂閱我的頭條號(hào),我會(huì)在這里發(fā)布所有與算法、機(jī)器學(xué)習(xí)以及深度學(xué)習(xí)有關(guān)的有趣文章。偶爾也回答有趣的問題,有問題可隨時(shí)在評(píng)論區(qū)回復(fù)和討論,看到即回。
(碼字不易,若文章對(duì)你幫助可點(diǎn)贊支持~)
sql語句如何實(shí)現(xiàn)冒泡排序
排序的原理是,第i個(gè)數(shù)與i后面的每個(gè)數(shù)進(jìn)行比較,如果比他小就交換位置,所以取出在i之后的最大的數(shù)
java中的冒泡排序
publicvoidbubbleSort(int[]data,StringsortType){
if(sortType.equals("asc")){//正排序,從小排到大
//比較的輪數(shù)
for(inti=1;i<data.length;i++){
//將相鄰兩個(gè)數(shù)進(jìn)行比較,較大的數(shù)往后冒泡
for(intj=0;j<
data.length
-i;j++){
if(data[j]>data[j+1]){
//交換相鄰兩個(gè)數(shù)
swap(data,j,j+1);
}
}
}
}elseif(sortType.equals("desc")){//倒排序,從大排到小
//比較的輪數(shù)
for(inti=1;i<data.length;i++){
//將相鄰兩個(gè)數(shù)進(jìn)行比較,較大的數(shù)往后冒泡
for(intj=0;j<
data.length
-i;j++){
if(data[j]<data[j+1]){
//交換相鄰兩個(gè)數(shù)
swap(data,j,j+1);
}
}
}
}else{
System.out.println("您輸入的排序類型錯(cuò)誤!");
}
printArray(data);//輸出冒泡排序后的數(shù)組值
}
用自然語言描述冒泡排序思想
1.冒泡排序是交換排序中一種簡單的排序方法。
它的基本思想是對(duì)所有相鄰記錄的關(guān)鍵字值進(jìn)行比效,如果是逆順(a[j]>a[j+1]),則將其交換,最終達(dá)到有序化;
其處理過程為:
(1)將整個(gè)待排序的記錄序列劃分成有序區(qū)和無序區(qū),初始狀態(tài)有序區(qū)為空,無序區(qū)包括所有待排序的記錄。
(2)對(duì)無序區(qū)從前向后依次將相鄰記錄的關(guān)鍵字進(jìn)行比較,若逆序?qū)⑵浣粨Q,從而使得關(guān)鍵字值小的記錄向上”飄浮”(左移),關(guān)鍵字值大的記錄好像石塊,向下“墮落”(右移)。每經(jīng)過一趟冒泡排序,都使無序區(qū)中關(guān)鍵字值最大的記錄進(jìn)入有序區(qū),對(duì)于由n個(gè)記錄組成的記錄序列,最多經(jīng)過n-1趟冒泡排序,就可以將這n個(gè)記錄重新按關(guān)鍵字順序排列。
冒泡排序的規(guī)則
1)基本思想
冒泡排序的基本思想就是:從無序序列頭部開始,進(jìn)行兩兩比較,根據(jù)大小交換位置,直到最后將最大(小)的數(shù)據(jù)元素交換到了無序隊(duì)列的隊(duì)尾,從而成為有序序列的一部分;下一次繼續(xù)這個(gè)過程,直到所有數(shù)據(jù)元素都排好序。
算法的核心在于每次通過兩兩比較交換位置,選出剩余無序序列里最大(小)的數(shù)據(jù)元素放到隊(duì)尾。
(2)運(yùn)行過程
冒泡排序算法的運(yùn)作如下:
1、比較相鄰的元素。如果第一個(gè)比第二個(gè)大(小),就交換他們兩個(gè)。
2、對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。這步做完后,最后的元素會(huì)是最大(小)的數(shù)。
3、針對(duì)所有的元素重復(fù)以上的步驟,除了最后已經(jīng)選出的元素(有序)。
4、持續(xù)每次對(duì)越來越少的元素(無序元素)重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較,則序列最終有序。
C語言:編寫一個(gè)程序,通過冒泡排序算法對(duì)數(shù)組
參考代碼:
inti,j,tmp;
intb[]={18,24,12,59,101,96,34};
for(i=0;i<6;i++)
for(j=i+1;j<7;j++)
{
if(b[i]>b[j])
{
tmp=b[i];
b[i]=b[j];
b[j]=tmp;
}
}
i=0;
while(i++<7)
printf("%d",b[i-1]);