氣泡排序與快速排序

2021-07-11 06:05:08 字數 2640 閱讀 9826

氣泡排序與快速排序屬於互換類的排序方法。所謂互換排序是指借助資料元素之間的互相交換進行排序的一種方法。

1.1氣泡排序

演算法情景:將乙個無序的陣列進行氣泡排序

氣泡排序方案1:

演算法思路:氣泡排序方案1的排序思想就是外層迴圈n-1;內層迴圈n-i-1次,內層的每次的迴圈都是將最大的數字下沉到最後位置,意思就是說把最大的數字放到最後的位置,次大的放到最後位置的前一位,依此類推。

編碼:

#include "stdafx.h"

#include #include using namespace std;

template void bub1(t p, int n)

} }int _tmain(int argc, _tchar* argv);

cout << "排序前:" << endl;

for (int i = 0; i < 10; i++)

bub1(a, 10);

cout << "排序後:" << endl;

for (int i = 0; i < 10; i++)

return 0;

}

氣泡排序方案2:

演算法思路:首先,從表頭開始往後掃瞄線性表,在掃瞄過程中逐次比較相鄰兩個元素的大小。若相鄰兩個元素中,前面的元素大於後面的元素,則將他們交換,稱之為消去乙個逆序,最後將線性表中的最大者換到了表的最後。

然後,從後到前掃瞄剩下的線性表,同樣在掃瞄過程中逐次比較相鄰兩個元素的大小。若相鄰兩個元素中,後面的元素小於前面的元素,則將它們互換,這樣就又消失了乙個逆序,最後將線性表中最小者換到了表的最前面,

對剩下的線性表重複上述過程,知道剩下的線性表變空為止,此時的線性表已經變為有序。

氣泡排序過程示意圖如下所示:

編碼:

#include "stdafx.h"

#include #include using namespace std;

template void bub2(t p, int n)

j = k + 1;

k = 0;

for (i = m; i >= j;i--) //從後往前掃瞄

if (p[i-1]>p[i]) //順序不對,交換

}return;

}int _tmain(int argc, _tchar* argv)

for (i = 0; i < 50; i++) //產生50個100-300之間的隨機數

p[i] = 100.0 + 200.0*p[i];

cout << "排序前的序列:" << endl;

for (i = 0; i < 10;i++)

bub2(p, 10); //對原序列中的第11到第40個元素進行排序

cout << "排序後的序列:" << endl;

for (i = 0; i < 10;i++)

return 0;

}

演算法情景:將乙個無序的陣列進行快速排序

演算法思路:對線性表或字表進行實際分割時,可以按如下步驟進行:

首先,在表的第乙個、中間乙個與最後乙個元素中選取中項,設為p(k),並將p(k)賦給t,再將表中的第乙個元素移到p(k)的位置上。

然後設定兩個指標i和j分別指向表的起始與最後的位置。反覆作以下兩步:

(1)將j逐漸減小,並逐次比較p(j)與t,直到發現乙個p(i)t為止,將p(i)移動到p(j)的位置上。

上述兩個操作交替進行,直到指標i與j指向同乙個位置(即i=j)為止,此時將t移到p(i)的位置上

編碼測試:

#include #include #include "bub.h"

using namespace std;

/*對線性表或字表進行實際分割時,可以按如下步驟進行:

首先,在表的第乙個、中間乙個與最後乙個元素中選取中項,設為p(k),並將p(k)賦給t,再將表中的第乙個元素移到p(k)的位置上。

然後設定兩個指標i和j分別指向表的起始與最後的位置。反覆作以下兩步:

(1)將j逐漸減小,並逐次比較p(j)與t,直到發現乙個p(i)t為止,將p(i)移動到p(j)的位置上。

上述兩個操作交替進行,直到指標i與j指向同乙個位置(即i=j)為止,此時將t移到p(i)的位置上

*/template void qck(t p, int n)

else

return;

}//表的分割

templatestatic int split(t p, int n)

} }p[i] = t;

return i;

}int main();

int arraysize = sizeof(array1) / sizeof(array1[0]);

for (int i = 0; i < arraysize; i++)

printf("\n");

qck(array1, arraysize);

for (int i = 0; i < arraysize; i++)

system("pause");

return 0;

}

氣泡排序與快速排序

一 氣泡排序 相信氣泡排序大家都知道,無非是每一趟排序時將相鄰兩個元素進行交換,根據從大到小或從小到大的順序,交換起來略有不同,如此進行n 1次排序即可得到整個陣列有序。1 平均時間複雜度為o n 2 2 最好情況下時間複雜度為o n 此時設定標誌位,元素有序時直接退出 3 最壞之間複雜度為o n ...

快速排序與氣泡排序

1.快速排序 思想 先隨機確定乙個key值,再通過將i 和j 分別將陣列第一次分為兩個區間,i從陣列的頭開始,j從陣列的尾部開始,其中如果遇到第乙個區間的值大於key的值就將這個值放到第二個區間,直到第乙個區間裡的所有值都要小於第二個區間的值,最後當i和j相等,將arr i key 呼叫遞迴再次執行...

java氣泡排序與快速排序

1.氣泡排序 public class bubblesort return count public int sort2 int array return count public static void main string args system.out.println bs.sort1 ar...