且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

排序算法之直接选择排序

更新时间:2022-08-15 21:13:10

直接选择排序

     直接选择排序是将整个待排序序列分为两部分,一部分为有序(最开始有序序列为空),一部分为无序(最终无序序列为空)。有序序列中的数都不大于无序序列中的数。它的过程是每次都在无序中寻找一个最小的数,然后将其与无序序列的第一个数交换,并并入有序序列。则有序序列长度增1,无序序列长度减1。
     比如:对R[0….n]数组进行选择排序。其中R[0…i]为有序,R[i+1…n]为无序,且R[0…i]中的每一个数都不大于R[i+1…n]中的数。
     在R[i+1…n]中选择一个最小的数R[k],交换R[i+1]与R[k],将R[i+1]并入有序序列。则现在的有序序列为R[0…i+1],无序序列为R[i+2…n],重复进行这样的操作,直到无序序列为空。

typedef int datatype;
int SelectionSort(datatype *array, int size)
{
    int i, j, k;

    if(array == NULL) {
        return -1;
    }

    for(i = 0; i < size; i++) {
    //k中存着无序序列中最小值的下标
        k = i;
        for(j = i+1; j < size; j++) {
        //如果无序序列中有数比最小值还小,则改变k的值
            if(array[k] > array[j]) {
                k = j;
            }
        }
        Swap(array+i, array+k);
    }

    return 0;
}

void Swap(datatype *a, datatype *b)
{
    int temp;

    temp = *a;
    *a = *b;
    *b = temp;
}