常用排序(冒泡 快速 選擇)

2021-07-10 07:31:30 字數 1940 閱讀 3033

氣泡排序思想是從頭開始掃瞄待排序的元素,在這過程中相鄰兩個元素之間進行比較,將較大的數向後移,(即大數向下沉,小數向上冒),經過從頭到尾的一次掃瞄後,當前最大的數就會被移動到最後一位了,然後記下這個位置,下一次掃瞄只需掃瞄到這個位置即可(即第i次掃瞄需要比較n-i次)。第i次掃瞄會將乙個第i大的數排到倒數第i位上。

**實現:

public

void

mpsort()}}

}

快速排序思想是在所要排序的序列中找乙個數作為基準數(pivot),一般選擇所要比較的序列中第乙個數,然後將比基準數大的放在基準數的右邊,比基準數小的放在其左邊。這樣經過一次排序後,這個基準數的位置就會確定下來了。確定這個基準數後再對其左右兩邊的數分別做以上操作,最終即可確定所要數的位置了。

舉例說明:(**網上)

如圖所示,有10位數組成的序列。設定兩個哨兵,令哨兵i指向第乙個元素,則6為當前基準數,令j指向最後乙個元素。

首先令哨兵j開始向左移動,直至找到乙個比基準數6小的數,如圖找到數字5;然後哨兵i開始向右移動,直至找到乙個比基準數6大的數,如圖找到7.然後將5和7進行交換。

第一次交換結束後,j繼續移動,找到4;i移動,找到9,將4和9進行交換。

最後,i和j在3的前面相遇,這時一次掃瞄完成,將基準數與3交換,此時基準數6的位置已經確定了。

在這之後,分別考慮6左邊的序列3,1,2,5,4和其右邊的序列9,7,10,8即可。(使用遞迴)

**實現:

public

static

void

quicksort(int left,int right)

while(i!=j)

//再找左邊大於pivot的數

while(i//交換

if(i//此時i,j相遇(i=j),則將基準與a[i]交換

a[left] = a[i];

a[i] = pivot;

//使用遞迴,分別處理當前基準的左右兩邊

quicksort(left,i-1);

quicksort(i+1,right);

}

在需要排序的序列中選出最小的元素,然後與第乙個元素交換,接著在剩下的元素中選出最小的與第二個元素交換,以此類推。

**實現:

public

void

selectsort()

}a[position] = a[i];

a[i] = temp;

}

}

冒泡,選擇,快速排序

氣泡排序 比較相鄰的兩個數,把比較的冒上去,所以很簡單的得到 for i 0 i 5 i 選擇排序 就是打擂台的方式,每一次找出最大的與末尾的交換,先把啊a i 的值和位置存上,然後與a j 比較,如果value大就賦值給臨時變數,然後交換位置 void selectsort char a,int ...

選擇,冒泡,快速排序

排序演算法是演算法中比較基礎的,在這裡先對三種最簡單的排序演算法做個總結。一 選擇排序 大致思路為 依次選擇無序區的最小值和無序區的第乙個值交換。void exchange int a,int b void selection sort int a,int len 時間複雜度為n 2。二 氣泡排序 ...

氣泡排序,選擇排序,快速排序

1.氣泡排序 氣泡排序 bubble sort 最為簡單的一種排序,通過重複走完陣列的所有元素,通過打擂台的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個陣列排好順序。因乙個個浮出所以叫氣泡排序。雙重迴圈時間o n 2 void bubblesort int arr in...