數據結構——交換排序(冒泡排序、快速排序)

一、冒泡排序

排序思想

從頭到尾,兩兩比較相鄰的兩個元素,如果順序不對,則交換順序,這樣每一次即可將參與比較中最小的找出來。

圖解

從下向上,如果array[i]<array[i-1]則進行交換,如最左側的一列,35交換-37交換-32不換-21不換-14交換-16交換。這樣就得到了第二列,循環執行。

代碼實現

/**
  *
  * @param array[] 要排序的數組
  *        length 數組長度
  */

static void bubbleSort(int array [],int length)
{
    int i,j;
    int change = TURE; // 用來標識之前比較過的是否已經有序

    for(i=0; i<length-1 && change ; i++)
    {
        change = FALSE;
        for(j=0; j<length-(i+1); j++)
        {
            if(array[j]>array[j+1])
            {
                int temp=array[j+1];
                array[j+1]=array[j];
                array[j]=temp;
                change=TURE;
            }
        }
    }
}

int main(void)
{
    int a[] = { 2, 5, 3, 1, 4};
    int length = sizeof a /sizeof a[0];
    int i;
    for (i = 0; i < length; i++)
        printf("%d%s", a[i], i == length -1 ? "\n" : " ");
    bubbleSort(a, length);
    for (i = 0; i < length; i++)
        printf("%d%s", a[i], i == length -1 ? "\n" : " ");

    return 0;
}

二、快速排序

排序思想

選取一個元素值,通過比較(從數組兩側向中間比較),比該值小得交換到其左邊,大的被交換到右邊,這樣將待排序的數組分成兩部分,左側都比該元素值小,右側都比該元素值大,針對每一個部分再執行以上的過程,直到不能再分爲止。

圖解

元素選取: 每一次以該組數組的第一個值作爲被選取得元素值。一次排序後分成兩部分,左側比4小,右側比4大。不斷執行該過程

代碼實現

遞歸方式實現:

void quickSort(int array[], int length) {
    if( length <= 1 ) return;

    int i=0, j=length-1, temp = array[0];
    while( i<j ) {
        while( array[j]>temp && j>i ) j--; array[i] = array[j];
        while( array[i]<=temp && i<j ) i++; array[j] = array[i];
    }
    array[i] = temp;
    sort(array, i);
    sort(array+i+1, length-i-1);
    return;
}

  
  
個人網站:點擊訪問
Email : [email protected]
  
WeChat:

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