冒泡排序(BubbleSort)的基本思想是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。如此重複下去,直至最終完成排序。
時間複雜度爲O(n*n),適用於排序小列表。
代碼:
#include <stdio.h>
void main()
{
int i, j, t, a[11];
printf("請輸入10個數:\n");
for (i = 1; i < 11; i++)
scanf("%d", &a[i]);
for (i = 1; i < 10; i++)
for (j = 1; j < 11-i; j++)
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
printf("排序後的順序是:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]);
printf("\n");
}
選擇排序的基本思想是:每一趟從待排序的數據元素中選出最小的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。
時間複雜度爲O(n*n),適用於排序小列表。
代碼:
#include<stdio.h>
void main()
{
int i, j, t, a[11];
printf("請輸入10個數:\n");
for (i = 1; i < 11; i++)
scanf("%d", &a[i]);
for (i = 1; i <= 9; i++)
for (j = i + 1; j <= 10; j++)
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
printf("排序後的順序是:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]);
printf("\n");
}
三、快速排序
快速排序(Quicksort)是對冒泡排序的一種改進,它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,
其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序
過程可以遞歸進行,以此達到整個數據變成有序序列。
時間複雜度爲O(nlog2n),適用於排序大列表。
代碼:
#include <stdio.h>
void qusort(int s[], int start, int end) /*自定義函數qusort()*/
{
int i, j; /*定義變量爲基本整型*/
i = start; /*將每組首個元素賦給i*/
j = end; /*將每組末尾元素賦給j*/
s[0] = s[start]; /*設置基準值*/
while (i < j)
{
while (i < j && s[0] < s[j])
j--; /*位置左移*/
if (i < j)
{
s[i] = s[j]; /*將s[j]放到s[i]的位置上*/
i++; /*位置右移*/
}
while (i < j && s[i] <= s[0])
i++; /*位置右移*/
if (i < j)
{
s[j] = s[i]; /*將大於基準值的s[j]放到s[i]位置*/
j--; /*位置右移*/
}
}
s[i] = s[0]; /*將基準值放入指定位置*/
if (start < i)
qusort(s, start, j - 1); /*對分割出的部分遞歸調用函數qusort()*/
if (i < end)
qusort(s, j + 1, end);
}
void main()
{
int a[11], i; /*定義數組及變量爲基本整型*/
printf("請輸入10個數:\n");
for (i = 1; i <= 10; i++)
scanf("%d", &a[i]); /*從鍵盤中輸入10個要進行排序的數*/
qusort(a, 1, 10); /*調用qusort()函數進行排序*/
printf("排序後的順序是:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]); /*輸出排好序的數組*/
printf("\n");
}