排序算法之直接选择排序

    xiaoxiao2026-05-04  11

    直接选择排序

         直接选择排序是将整个待排序序列分为两部分,一部分为有序(最开始有序序列为空),一部分为无序(最终无序序列为空)。有序序列中的数都不大于无序序列中的数。它的过程是每次都在无序中寻找一个最小的数,然后将其与无序序列的第一个数交换,并并入有序序列。则有序序列长度增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; }
    最新回复(0)