C語言幾種常見排序算法(一)

1.冒泡排序
思路:
它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
對於包含n個元素的數組,需要進行n-1次操作:每操作一次,會找出一個較大元素往後移動。

而對於這n-1次操作,每次需要進行n-1-i次排序。

/*******************************************************

void bubble_sort(int *array, int len)
{
    int i, j, tmp;

    for(i = 0; i < len - 1; i++)        //需要進行len - 1次操作。
    {
        for (j = 0; j < len - 1 -i; j++)   
        {
            if (array[j] > array[j+1])
            {
                tmp = array[j+1];
                array[j+1] = array[j];
                array[j] = tmp;
            }
        }
    }
  
}

********************************************************/
2.插入排序:
思路:
將數組看作兩部分,一部分爲已經排好序的,另一部分爲待排序的,每次從待排序的序列中拿出一個去和前面已排序的部分逐一進行比較找出適當的位置插入並保證此部分仍然有序。
一般將數組第一個元素看做已經排序的,所以對於包含n個元素的數組來說,需要進行n-1次操作。
而每次操作需要拿待排序的元素和見面已經排序的元素依次比較。

/**********************************************************

void insert_sort(int *array, int len)
{
    int i, j, tmp;
    for (i = 1; i < len; i++)
    {
        tmp = array[i];
        for (j = i; j > 0 && tmp <  array[j-1]; j--)
            array[j] = array[j-1];
        array[j] = tmp;
    }
}

***********************************************************/

3.快速排序
快速排序是C.R.A.Hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其爲分治法(Divide-and-ConquerMethod)。
該方法的基本思想是:

1.先從數列中取出一個數作爲基準數。
2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重複第二步,直到各區間只有一個數。

/*************************************************************************************

int adjust_array(int a[], int l, int r)
{
    int pivot = a[l];

    while (l < r)
    {
        while (l < r && a[r] >= pivot)
            r--;
        a[l] = a[r];

        while (l < r && a[l] <= pivot)
            l++;
        a[r] = a[l];
    }

    a[l] = pivot;

    return l;
}

void __quick_sort(int a[], int l, int r)

{
    int pivotloc;
    if (l >= r)
        return;

    pivotloc = adjust_array(a, l, r); 
    __quick_sort(a, l , pivotloc);
    __quick_sort(a, pivotloc + 1, r);
}

*******************************************************/



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