八 氣泡排序

2021-10-08 11:28:07 字數 1296 閱讀 1567

比較相鄰的元素,如果前乙個比後乙個大,交換之。

第一趟排序第1個和第2個一對,比較與交換,隨後第2個和第3個一對比較交換,這樣直到倒數第2個和最後1個,將最大的數移動到最後一位。

第二趟將第二大的數移動至倒數第二位

…因此需要n-1趟;

對於每一次比較操作。若aj ≤ aj+1,aj, aj+1保持不變,於是aj ≤ aj+1;若aj > aj+1,則aj, aj+1互換位置,於是aj < aj+1。因此經過一次「比較」操作後恒有aj≤ aj+1。下面直接引用此結論。

對於每一次以下標1開始的迴圈,對j作數學歸納法。

進行了第j = 1次比較後,由上面結論知,aj≤ aj+1。所以aj+1是a1, …, aj, aj+1中最大的數。

假設當j = k 時「aj+1是a1, …, aj, aj+1中最大的數」成立。則當j = k + 1時,

由上面結論知,aj≤ aj+1,於是aj不超過aj+1。而根據假設aj是a1, …, aj-1, aj中最大的數。於是a1, …, aj, aj+1中最大的數是aj+1。

由數學歸納法原理可知。ai是a1, …, ai-1, ai中最大的數。

完成排序後,由剛才對i的討論的任意性可知a2 = max(a1, a2), a3 = max(a1, …, a3), …, an = max(a1,…, an)。

因為a1≤ max(a1, a2) ≤ max(a1, …, a3) ≤ … ≤ max(a1, …, an),

所以a1≤ a2≤ … ≤ an。

證畢。

public

class

bubblesortnormal

;int temp =0;

// 要遍歷的次數

for(

int i =

0; i < list.length-

1; i++)}

}}

從**中我們可以發現,最原始的氣泡排序演算法對相同規模的輸入,其排序次數是固定不變的。然而經過一次次排序操作後,未排資料將趨於穩定(即有序),這是因為每次「冒泡」都是相鄰元素進行比較和交換完成的。考慮到這種情況,我們便有了下面這種優化方案:

void

bubblesort1

(int arr,

int n)}}

}

第一種改進方案雖然有一定的優化效果,但只是考慮了尾端元素有序的情況,並沒有考慮到元素區域性有序這種情況,因此我們有了第二種改進方案:

void bubblesort2(int arr, int n) 

}}

八大排序 氣泡排序

原理 每次比較兩個數值,然後將數值大的交換到右邊。本人理解 迴圈陣列長度的次數,每次迴圈,都會將當前剩下的,還未排好序的數值中最大的值,放到當前未排好序的數值的最右邊,即下標為 陣列的長度 當前迴圈的次數 當前迴圈的次數 i 1 下標是由0開始,所以下標值要加1才等於迴圈次數 注釋 減當前迴圈的次數...

八大排序演算法 氣泡排序

在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。include include 常規氣泡排序 void bubblesort int r,int n ...

八大排序之氣泡排序

氣泡排序,穩定,平均與最壞時間複雜度為o n 2 最好為o n 空間複雜度為o 1 include using namespace std void bubblesort int numbers,const int length int main int length 0 cin length fo...