排序算法--选择排序--详解及代码

排序算法--选择排序--详解及代码

选择排序:

选择排序( 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

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.csdn.net/alzzw/article/details/98100378

冒泡排序:https://blog.csdn.net/alzzw/article/details/97906690

插入排序:https://blog.csdn.net/alzzw/article/details/97967278

快速排序:https://blog.csdn.net/alzzw/article/details/97970371

归并排序:https://blog.csdn.net/alzzw/article/details/98047030

堆排序:https://blog.csdn.net/alzzw/article/details/98087519

基数排序:https://blog.csdn.net/alzzw/article/details/98240042

计数排序:https://blog.csdn.net/alzzw/article/details/98245871

相关推荐

哪里有黄芩种子出售
nba365直播现场视频直播

哪里有黄芩种子出售

07-08 👁️ 9856
如何彻底删除部分的微信聊天记录?通过这几种操作就能实现“真删除”!
棋王争霸赛:范廷钰锁定八强席位,陈梓健遭淘汰
nba365直播现场视频直播

棋王争霸赛:范廷钰锁定八强席位,陈梓健遭淘汰

08-02 👁️ 129
500千克等于多少斤
nba365直播现场视频直播

500千克等于多少斤

07-30 👁️ 3927