• 简单选择排序


    输入: 待排序的整型数组, 输出: 排序完毕的整型数组.
    排序方法: 按照从小到大排序.
    数组下标0, 不存放元素, 用作哨兵或其它用途.

    实现思路:
    每次循环一次, 把最小的值放在首位.
    例如让第1个值, 分别与后面所有的值比较, 如果发现后面有值比第1个值小,
    则记录下这个位置, 当一次循环完毕后记录的位置就是最小值, 交换记录位置
    的值和当前值.

    完整实现代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void getRandomArr (int arr[], int n);
    void printArr (int arr[], int n);
    void swap (int arr[], int i, int j);
    void selectSort (int arr[], int n);
    
    int main () {
        int max = 10; // 数组长度
        int sortArr[max]; // 待排序数组
        getRandomArr(sortArr, max); // 为待排序数组, 赋值
        printf("待排序的元素如下: 
    ");
        printArr(sortArr, max);
    
        printf("排序完毕的元素如下(从小到大): 
    ");
        selectSort(sortArr, max);
        printArr(sortArr, max);
        return 0;
    }
    
    // 函数功能: 对主程序中的数组进行, 随机数赋值
    // 参数: arr[] 主程序数组名称, n 数组大小
    void getRandomArr (int arr[], int n) {
        int i;
        arr[0] = 0; // 默认0号下标, 值为0
        srand(time(0)); // 随机数种子
        for (i=1; i<n; i++) {
            arr[i] = rand() % 150 + 1; // 范围[1, 150]
        }
    }
    
    // 函数功能: 打印数组
    // 参数: arr[] 需要打印的数组, n 数组大小
    void printArr (int arr[], int n) {
        int i;
        for (i=0; i<n; i++) {
            printf("arr[%d]: %d
    ", i, arr[i]);
        }
        printf("
    ");
    }
    
    // 函数功能: 交换数组i和j下标的2个元素
    void swap (int arr[], int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    
    // 函数功能: 完成对arr[]的排序
    // 参数: arr[] 待排序的数组, n该数组的长度
    void selectSort (int arr[], int n) {
        int i;
        int j;
        int minPos; // 最小值下标
        for (i=1; i<n; i++) {
            minPos = i;
            for (j=i+1; j<n; j++) {
                if (arr[minPos] > arr[j]) {
                    minPos = j;
                }
            }
    
            if (minPos != i) {
                swap(arr, i, minPos);
            }
        }
    }
    
    
  • 相关阅读:
    flex
    两端对齐
    background-clip、background-origin、box-sizing
    animation
    transform translate transition 的区别
    如何将页脚固定在页面底部
    normalize.css
    使用 Swift 制作一个新闻通知中心插件(1)
    在 App 扩展和主 App 间共享数据
    asp.net core Cookie认证
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7625803.html
Copyright © 2020-2023  润新知