【C語言】冒泡排序,選擇排序,快速排序

一、冒泡(Bubble)排序
冒泡排序(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");
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章