选择排序详解(C语言)

前言
选择排序是一种简单直观的排序算法。它的基本思想是每次从待排序的数据中选择最小(或最大)的元素,放到已排序的序列的首段(或末尾)。今天我就带小伙伴们学习一下选择排序的使用,让我们开始吧!
在这里插入图片描述
选择排序
正如我们刚才介绍的那样,我们要先从待排序的数组中找到最小(或最大)值,(为了方便,我们先暂定找最小值),然后放在序列的首端,比如这个数组: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;
}

结尾
看到这里,想必小伙伴们已经能充分了解选择排序的用法,如果觉得博主讲的不错,请给博主一个关注,点赞,收藏哦~,我们下期再见!

猜你喜欢

转载自blog.csdn.net/Tokai___Teio/article/details/135187637
今日推荐