501 字
3 分钟
一个选择排序函数

Mark一下

原理#

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法(很多教科书都说选择排序是不稳定的,但是,完全可以将其实现成稳定的排序方法)。

n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

①初始状态:无序区为R[1..n],有序区为空。

②第1趟排序

在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……

③第i趟排序

第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。

优劣#

优点:移动数据的次数已知(n-1次)。

缺点:比较次数多,不稳定。

函数#

void compositor(int w,int x, int y,int z)
{
int a[4], i, j, temp, b;
a[0] = w; a[1] = x; a[2] = y; a[3] = z;
for (i = 0; i < 4 - 1; i++)
{
temp = i;
for (j = i + 1; j < 4; j++)
{
if (a[temp] > a[j])
temp = j;
}
if (i != temp)
{
b = a[temp];
a[temp] = a[i];
a[i] = b;
}
}
for (i = 0; i < 4; i++)
cout << a[i]<<" ";
cout << endl;
}

本函数是给4个数排序后输出,该函数可根据实际情况更改

一个选择排序函数
https://yuzi.dev/posts/course-notes/selection-sort-function
作者
Yuzi
发布于
2020-12-01
许可协议
CC BY-NC-SA 4.0