排序算法——選擇排序

原理

每次從數組中選取最小的數字放在第一個位置,直到數組最後一個位置也被放上合適的數字。

分析

由於每次選擇最小的數字過程中,每個數字都會被遍歷一次,總共會選擇nn爲數組長度)次,所以其最好和最壞情況下的時間複雜度都是On2);由於其選擇交換操作都是在原數組上進行,所以空間複雜度爲O1)。

C語言實現

void swap(void *a, void *b, int size)
{
    void *tmp = Malloc(size);
    memcpy(tmp, a, size);
    memcpy(a, b, size);
    memcpy(b, tmp, size);
    free(tmp);
}
Boolean select(int *arr, int arrlen)
{
    int i = 0, j = 0;
    int minindex = 0;

    if(NULL == arr || 0 >= arrlen){
        printf("Invalid input...\n");
        return FALSE;
    }
    for(i = 0; i < arrlen ; ++i){
        minindex = i;
        for(j = i; j < arrlen; ++j){
            if(arr[j] < arr[minindex]){
                minindex = j;
            }
        }
        swap(arr+minindex, arr+i, sizeof(arr[i]));
    }
}


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