选择排序:
选择排序( Selection sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
选择排序算法通过选择和交换来实现排序,其排序流程如下:
- (1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
- (2)接着从剩下的n-1个数据中选择次小的1个元素,将其和第2个位置的数据交换
- (3)然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序。
假如给定初始数据:(118,101,105,127,112)
一次排序:101,118,105,127,112
二次排序:101,105,118,127,112
三次排序:101,105,112,127,118
四次排序:101,105,112,118,127
(绿色为交换的数据)
每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。具体来说,假设长度为n的数组arr,要按照从小到大排序,那么先从n个数字中找到最小值min1,如果最小值min1的位置不在数组的最左端(也就是min1不等于arr[0]),则将最小值min1和arr[0]交换,接着在剩下的n-1个数字中找到最小值min2,如果最小值min2不等于arr[1],则交换这两个数字,依次类推,直到数组arr有序排列。算法的时间复杂度为O(n^2)。
代码:
#include<iostream>
using namespace std;
#define N 10
void Select_Sort(int* arr, int n) //arr为数据数组,n为数组长度
{
for (int i = 0; i < n-1; i++) {
int min = i;
for (int j = i; j < n; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
if (min != i) {
swap(arr[i], arr[min]);
}
}
}
int main()
{
int arr[N]= { 1,4,6,3,0,2,5,9,8,7 };
Select_Sort(arr, 10);
for (int i = 0; i < N; i++)
{
cout << arr[i] << ",";
}
cout << endl;
return 0;
}
十大经典算法复杂度及稳定性比较:https://blog.youkuaiyun.com/alzzw/article/details/98100378
冒泡排序:https://blog.youkuaiyun.com/alzzw/article/details/97906690
插入排序:https://blog.youkuaiyun.com/alzzw/article/details/97967278
快速排序:https://blog.youkuaiyun.com/alzzw/article/details/97970371
归并排序:https://blog.youkuaiyun.com/alzzw/article/details/98047030
堆排序:https://blog.youkuaiyun.com/alzzw/article/details/98087519
基数排序:https://blog.youkuaiyun.com/alzzw/article/details/98240042
计数排序:https://blog.youkuaiyun.com/alzzw/article/details/98245871