选择排序
介绍
在要排序的一组数中,选出最小或最大的一个数与第一个数交换;然后在剩下的数中再找最大或最小数,与第二个数交换。以此类推......
直到第n-1个元素(倒数第二个数)和第n个元素(最后一个)比较为止。
过程
第一趟,从n个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换;
以此类推.......
第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换;
直到整个序列按关键码有序。
代码:
#include<iostream> using namespace std; void print(int a[], int n, int i){ cout << "第" << i + 1 << "遍:"; for (int j = 0; j < n; j++){ cout << a[j] << " "; } cout << endl; } int SelectMinKey(int a[], int n, int i){ int k = i; for (int j = i + 1; j < n; j++){ if (a[k] > a[j]) k = j; } return k; } void selectSort(int a[], int n){ int key, tmp; for (int i = 0; i < n; i++){ //最小的元素的下标 key = SelectMinKey(a, n, i); if (key != i){ //交换 tmp = a[i]; a[i] = a[key]; a[key] = tmp; } print(a, n, i); } } int main(){ int a[8] = {3,1,5,7,2,4,9,6}; cout << "初始值:"; for (int j = 0; j < 8; j++){ cout << a[j] << " "; } cout << endl << endl; selectSort(a, 8); return 0; }
结果: