选择排序(图解+代码详解)

  • Post author:
  • Post category:其他

今天我们就用C语言实现一下选择排序

还是老样子,我们先来解释一下什么是选择排序,选择排序其实看名字就知道他的意思,选择数据中最小或者最大的元素,并把该元素放在头部或者尾部,依次选择排放,最后达到一个排序的目的。

还是老规矩,上图!

(emmm 这个水印今儿怎么这么大了,看来是要让我VIP了。。)

如图所示,每个周期都会筛选一个目前剩余最小的数,然后把它放在左端,从而达到了排序的目的

上代码

#include <stdio.h>
#include <stdlib.h>

void swap(int* a, int* b);
void SelectionSort(int *arr, int n);
int main()
{
	int arr[9] = { 3,1,6,5,9,7,8,2,4 };//定义数组
	int nums = sizeof(arr) / sizeof(int);//计算数组个数
	SelectionSort(arr, nums);//调用函数对数组进行排序
	for (int i = 0; i < nums; i++)//循环遍历数组
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}
void swap(int* a, int* b)//交换函数,把要交换的元素的地址写进来进行交换
{
	int temp = *a;	//a,b都是地址,所以要加*来解引用
	*a = *b;
	*b = temp;
}

void SelectionSort(int *arr, int n)
{
	//arr[9] = { 3,1,6,5,9,7,8,2,4 }; n = 9
	for (int i = 0; i < n - 1; i++)//循环 数组个数 - 1 次
	{
		for (int j = i + 1; j < n; j++) //对当前数组中的每个元素进行遍历
		{
			if (arr[i] > arr[j]) {	//如果发现了比当前左端小的数就替换
				swap(&arr[i], &arr[j]);
				for (int i = 0; i < n; i++)//循环遍历数组
				{
					printf("%d ", arr[i]);
				}
				printf("\n");
			}
		}

	}
}

同时我也把运行结果给大伙附上

1 3 6 5 9 7 8 2 4
1 2 6 5 9 7 8 3 4
1 2 5 6 9 7 8 3 4
1 2 3 6 9 7 8 5 4
1 2 3 5 9 7 8 6 4
1 2 3 4 9 7 8 6 5
1 2 3 4 7 9 8 6 5
1 2 3 4 6 9 8 7 5
1 2 3 4 5 9 8 7 6
1 2 3 4 5 8 9 7 6
1 2 3 4 5 7 9 8 6
1 2 3 4 5 6 9 8 7
1 2 3 4 5 6 8 9 7
1 2 3 4 5 6 7 9 8
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9

大家看看图,再看看代码结果,就可以很清晰的理解到了什么叫做选择排序

其实排序算法最难理解的是for循环,两次for 的取值,以及条件,如果把这两个条件搞清楚了,排序算法基本上就会了一大半了

还有就是大家看着我的代码比其他人写的代码可能要长一些,但是我相信,至少我个人感觉,我这样写更方便于理解,让大家看得更明白一些,虽然说浓缩是精华,但是你都不知道这个精华是什么,你怎么去吸收呢,你们说是这个理吧

如果C要用函数进行封装的话,一定一定要搞清楚实参和形参 


版权声明:本文为weixin_45821611原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。