前言
选择排序是一种简单直观的排序算法。它的基本思想是每次从待排序的数据中选择最小(或最大)的元素,放到已排序的序列的首段(或末尾)。今天我就带小伙伴们学习一下选择排序的使用,让我们开始吧!
选择排序
正如我们刚才介绍的那样,我们要先从待排序的数组中找到最小(或最大)值,(为了方便,我们先暂定找最小值),然后放在序列的首端,比如这个数组:5 6 2 3 1,我们要把这五个数按照从小打大的顺序排列,我们首先找到这五个数中的最小值1,然后放在下标为0的地方,然后再从剩下四个数字里再选出最小值2,让在下标为1的地方,以此类推。
这就是选择排序的思路,下面我们来使用代码实现:
#include<stdio.h>
int main()
{
int arr[6] = { 1,1,4,5,1,4 };//定义一个待排序的数组
for (int i = 0; i < 6; i++)//6是数组的长度
{
int min = i;//min为最小值的下标,先让min=i,在后续循环中会变为目标值
for (int j = i; j < 6; j++)
{
if (arr[j] < arr[min])//如果发现更小的值,更换min
{
min = j;
}
}
int tem = arr[i];//交换首端和最小值
arr[i] = arr[min];
arr[min] = tem;
}
return 0;
}
我们会发现这样有一点慢,我们还可以对其进一步优化!
优化
我们发现,每次循环我们都只找一个最小值有点慢,那么如果我们每次循环分别找出最小值和最大值,让他们分别和首端和末尾进行交换,岂不是效率翻倍?那么上代码!
#include<stdio.h>
int main()
{
int arr[6] = { 1,1,4,5,1,4 };//定义一个待排序的数组
int begin = 0;//首端
int end = 5;//末尾
while (begin < end)
{
int min = begin;//最小值的下标
int max = begin;//最大值的下标
for (int i = begin+1; i <= end; i++)//找出最小值和最大值的下标
{
if (arr[min] > arr[i])
min = i;
if (arr[max] < arr[i])
max = i;
}
int tem = arr[begin];//最小值和首端进行交换
arr[begin] = arr[min];
arr[min] = tem;
if (begin == max)//如果begin=max那么max和min交换了位置,所以max要等于min
{
max = min;
}
tem = arr[end];//最大值与末尾进行交换
arr[end] = arr[max];
arr[max] = tem;
begin++;
end--;
}
return 0;
}
结尾
看到这里,想必小伙伴们已经能充分了解选择排序的用法,如果觉得博主讲的不错,请给博主一个关注,点赞,收藏哦~,我们下期再见!