欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

选择排序

程序员文章站 2022-05-12 21:28:58
...

排序原理:

        对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。

代码实现:

# include<stdio.h>
# include<stdlib.h>
# include<assert.h>
void Swap(int *a, int *b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}
void SelectSort(int *arr, int len)
{
	int min = 0;
	for (int i = 0; i < len; ++i)
	{
		min = i;
		for (int j = i + 1; j < len; j++)
		{
			if (arr[j] < arr[min])
			{
				min = j;
			}
		}
		if (min != i)
		{
			Swap(&arr[min], &arr[i]);
		}
	}
}
void Show(int *arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}
int main()
{
	int arr[] = { 2, 7, 96, 45, 32, 45, 76, 29, 94 };
	int len = sizeof(arr) / sizeof(arr[0]);
	Show(arr, len);
	SelectSort(arr, len);
	Show(arr, len);
	return 0;
}

排序特性:

时间复杂度 空间复杂度 稳定性
O(n^2) O(1) 不稳定

 

相关标签: 选择排序