数据结构选择排序

目录

核心思想

动图演示

过程演示 

选择排序代码 

全部代码

核心思想

假设数组长度为n,需要进行n-1次比较,每次比较选出一个最小值往前面放,直到n - i - 1次循环结束,把数组中所以数据排完就结束。

动图演示

过程演示 

数据结构选择排序_第1张图片

数据结构选择排序_第2张图片 

选择排序代码 

//选择排序
void InSertSort(int* a, int n)
{
	int min = 0,begin = 0;
	//遍历完数组就结束循环
	while( begin< n- 1)
	{
		// 记录当前轮次的最小值索引,初始化为begin
		min = begin;
		//每次把begin前面的数不用拿出来比较了
		for (int i = begin; i < n; i++)
		{
			if (a[min] > a[i])
				min = i;//更新最小值下标

		}
		//把当前的最小值往前放,begin继续往后走
		Swap(&a[begin++], &a[min]);
	}
}

全部代码


#include

void Swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
//选择排序
void InSertSort(int* a, int n)
{
	int min = 0,begin = 0;
	//遍历完数组就结束循环
	while( begin< n- 1)
	{
		// 记录当前轮次的最小值索引,初始化为begin
		min = begin;
		//每次把begin前面的数不用拿出来比较了
		for (int i = begin; i < n; i++)
		{
			if (a[min] > a[i])
				min = i;//更新最小值下标

		}
		//把当前的最小值往前放,begin继续往后走
		Swap(&a[begin++], &a[min]);
	}
}

int main()
{
	int arr[] = { 3,1,6,4,7,8,2,9,10,5 };
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}printf("\n");

	InSertSort(arr, sizeof(arr) / sizeof(arr[0]));

	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}printf("\n");
	return 0;
}

你可能感兴趣的:(数据结构,排序算法,算法,c语言)