第三章 ALDS1_2_B:Selection Sort 选择排序法

来源:互联网 发布:英国 实力 知乎 编辑:程序博客网 时间:2024/06/16 09:02

知识点

选择排序法执行步骤
(1)数组A一开始处于未排序状态
(2)从未排序部分找出出最小值的位置minj。
(3)将minj位置的元素与未排序部分的起始位置交换
(4)交换后,则前一步骤的起始位置就是排序后的元素,未排序部分的元素就从下一位开始
(5)执行步骤(2),直到全部元素都排序好。

小结

时间复杂度O(n2),空间复杂度O(n), 是不稳定排序

问题链接

ALDS1_2_B:Selection Sort

问题内容

计算数列A通过选择排序法交换元素的次数和排序完的结果

思路

在选择排序法交换元素后累加即可

代码

#include<iostream>#include<cstdio>#include<cmath>using namespace std;// 选择排序法int selectionSort(int A[], int n) {    int cnt = 0;    for (int i = 0; i < n; i++) {        int minj = i;        for (int j = i; j < n; j++) {            if (A[j] < A[minj])                minj = j;        }        if (i != minj)            swap(A[i], A[minj]), cnt++;    }    return cnt;}int main() {    int n, A[110];    scanf("%d", &n);    for (int i = 0; i < n; i++)        scanf("%d", &A[i]);    int cnt = selectionSort(A, n);    for (int i = 0; i < n; i++)        printf("%d%c", A[i], i == n - 1 ? '\n' : ' ');    printf("%d\n", cnt);    return 0;}
原创粉丝点击