C++算法之选择排序
一、算法思想
选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
二、算法步骤
- 将选择排序的算法写成一个SelectionSort函数,函数实现的原理是采用两层for循环,第一层只需要从0循环到n-1就行,这时的i值需要参数k来存储一下,第二层循环的开始值是i+1,写一个判断函数,如果前一个值比后一个值大就将后面的值的位置赋值给i,前面i值的存储也是因为这个,这样一直循环到最后i值存放的值就是最小的。
- 在第二层for循环之外再写一个判断函数,如果这时的i值如果和最开始的i值不一样,那么就需要进行交换。
三、代码
SelectionSort函数
#Include<iostream>
#Include<ctime>
using namespace std;
#define N 10
void SelectionSort(int A[], int n) {
int k, t;
for (int i = 0; i < n - 1; i++) {
//存储i的值
k = i;
for (int j = i + 1; j < n; j++) {
if (A[j] < A[k]) //如果前面的值比后面的大,就将后面位置的j值赋值给i
k = j;
}
if (i != k) { //找到的最小值的位置k不在该在的位置i上,就实现交换
t = A[i];
A[i] = A[k];
A[k] = t;
}
}
}
主函数
int main() {
int A[N], i;
//设置随机数种子
srand((unsigned int)time(0));
for (i = 0; i < N; i++) {
A[i] = rand()%100;
cout << A[i] << " ";
}
cout << endl;
SelectionSort(A, N);
for (i = 0; i < N; i++) {
cout << A[i] << " ";
}
return 0;
}
四、复杂度分析
从代码的结构我们可以看出,本次实现使用了2层for循环,所以复杂度为o(n^2)。