您的位置:首页 > 其它

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

2017-12-22 00:37 246 查看

知识点

选择排序法执行步骤

(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  选择排序法