交換排序:兩兩比較待排序記錄的關鍵碼,若是逆序,則交換,直到無逆序。其中最簡單的交換排序是:氣泡排序。
氣泡排序(bubble sort,也叫起泡排序):不斷地比較相鄰的記錄,若是不滿足排序要求,則交換。
交換時,可從前向後,也可從後向前。看乙個從前向後的排序過程:
原序列 12 3 45 33 6
下標 0 1 2 3 4
第一趟:
3 12 45 33 6 (3,12交換)
3 12 45 33 6 (12,45不用交換)
3 12 33 45 6 (45,33交換)
3 12 33 6 45 (45,6交換)
第二趟:
3 12 33 6 45 (3,12不用交換)
3 12 33 6 45 (12,33不用交換)
3 12 6 33 45 (33,6交換)
第三趟:
3 12 6 33 45 (3,12不用交換)
3 6 12 33 45 (12,6交換)
第四趟:
3 6 12 33 45 (3,6不用交換)
結束。以上過程非常之詳盡,相信你一定懂了。
**一:
void bubblesort10(int a, int n) //從左向右 }
}void bubblesort11(int a, int n) //從右向左
}}
繼續思考:若是在某一趟排序中,無元素交換,是不是表明已全部有序了呢?
是的!既然如此,下一趟排序就不用進行了。
針對**一,給出優化的**二:
void bubblesort20(int a, int n) //從左向右
j--;
} }}void bubblesort21(int a, int n) //從右向左
j++;
} }}
再思考:下一趟排序向右(或向左)的最遠位置,只是簡單的減一嗎?可否更高效?
針對**二,給出優化的**三:
void bubblesort30(int a, int n) //從左向右
}if (k == 0)
break;
j = k;
} }
}void bubblesort31(int a, int n) //從右向左
}if (k == n - 1)
break;
j = k;
} }
}
交換方法的**是這樣:
void swap(int &a, int &b)
}
測試走起……
小結:
氣泡排序是穩定的,但不高效。時間複雜度是o(n^2)。
若是有所幫助,頂乙個哦!
專欄目錄看這裡:
氣泡排序 交換排序
最壞情況下,直接插入排序時間複雜度為 n 最小時間代價為 n 平均時間代價為 n 附加儲存空間 乙個儲存單位 穩定性 穩定 原址性 是 緊緻性 乙個比較,三個賦值操作 特點 對於基本有序,或偶爾有幾個在有序位置附近時,效率高,只有直接插入排序和它達到一樣的效果 整體效果不如直接插入排序,因為,直接插...
交換排序 氣泡排序
1.原理 從小到大排序 存在10個不同大小的氣泡,由底至上地把較少的氣泡逐步地向上公升,這樣經過遍歷一次後,最小的氣泡就會被上公升到頂 下標為0 然後再從底至上地這樣公升,迴圈直至十個氣泡大小有序。在 氣泡排序中,最重要的思想是兩兩比較,將兩者較少的公升上去 氣泡排序最壞情況的時間複雜度是o n 2...
交換排序 氣泡排序
交換排序,通過相鄰資料的交換來達到排序的目的 對陣列中的各資料,一次比較相鄰的兩個元素的大小。如果前面的資料大於後面的資料,就交換這兩個資料,經過第一輪的多次比較排序後,便可把最小的資料排好 再用同樣的方法把剩下的資料逐個進行比較,最後便可按照從小到大的順序排好陣列各資料的順序。初始資料 118 1...