选择排序

代码:

/**************************************************
 * 选择排序
 *
 * 参考:算法导论 第3版 第一部分 第2章 2.2
 *
 * 本例中,数组的第0个位置存放的数值无意义,不参与程序运行过程
 **************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 选择排序
void selection_sort(int [], size_t);

// 使用随机数填充数组
void fill_array_with_random(int [], size_t);

// 打印数组
void display(int [], size_t);

int main(int argc, const char * argv[]) {
    // 设定数组长度
    size_t length = 10;
    int A[length];
    
    // 使用随机数填充数组
    fill_array_with_random(A, length);
    
    // 打印排序前的数组
    printf("Before sort:\n");
    display(A, length);
    
    // 插入排序
    selection_sort(A, length);
    
    // 打印排序后的数组
    printf("After sort:\n");
    display(A, length);
    
    return 0;
}

// 选择排序
void selection_sort(int A[], size_t length) {
    for (size_t i = 1; i <= length; ++i) {
        size_t i_min = i;
        for (size_t j = i + 1; j <= length; ++j) {
            if (A[j] < A[i_min]) {
                i_min = j;
            }
        }
        
        // 交换元素
        int temp = A[i_min];
        A[i_min] = A[i];
        A[i] = temp;
    }
}

// 使用随机数填充数组
void fill_array_with_random(int A[], size_t length) {
    // 指定生成的随机数范围为[lower_limit, upper_limit)
    int lower_limit = 100;
    int upper_limit = 1000;
    
    srand((unsigned int)time(NULL));
    for (size_t i = 1; i <= length; ++i) {
        A[i] = rand() % (upper_limit - lower_limit) + lower_limit;
    }
}

// 打印数组
void display(int A[], size_t length) {
    for (size_t i = 1; i <= length; ++i) {
        printf("%d ", A[i]);
    }
    printf("\n");
}

输出:

Before sort:
379 926 992 362 457 693 885 454 232 808 
After sort:
232 362 379 454 457 693 808 885 926 992 

 

posted @ 2015-05-10 18:30  Xwoder  阅读(214)  评论(0编辑  收藏  举报