选择排序

代码:

/**************************************************
 * 选择排序
 *
 * 参考:算法导论 第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 

 

转载于:https://www.cnblogs.com/xwoder/p/4492709.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值