排序算法(三)————选择排序

选择排序原理与实现:
从一组数中挑选最大一个放到尾部,除去最后一个以外的数据再次选择最大的放到尾部,以此类推。
例:
有以下几个数:3 7 4 2 6 1,请使用选择排序将他们从小到大排列
解:
第一趟:
3 7 4 2 6 1
在其中找到最大的元素7,然后将其和最后一个元素交换位置:
3 1 4 2 6 7

第二趟:
3 1 4 2 6 7
除了已经排好的7,在其中找到最大的元素6,然后将其和最后一个元素交换位置:
3 1 4 2 6 7

第三趟:
3 1 4 2 6 7
除了已经排好的6和7,在其中找到最大的元素4,然后将其和最后一个元素交换位置:
3 1 2 4 6 7

第四趟:
3 1 2 4 6 7
除了已经排好的4,6和7,在其中找到最大的元素3,然后将其和最后一个元素交换位置:
2 1 3 4 6 7

第五趟:
2 1 3 4 6 7
除了已经排好的3,4,6和7,在其中找到最大的元素2,然后将其和最后一个元素交换位置:
1 2 3 4 6 7
此时已经排序完毕
最终结果为:1 2 3 4 6 7
代码实现:

#include <stdio.h>
int FindMaxPos(int arr[], int m)
{
	int max = arr[0];
	int pos = 0;
	for (int i = 0;i < m;i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
			pos = i;
		}
	}
	return pos;
}

void SelectionSort(int arr[], int m)
{
	while (m > 1)
	{
		int pos = FindMaxPos(arr, m);
		int temp = 0;
		temp = arr[m - 1];
		arr[m - 1] = arr[pos];
		arr[pos] = temp;
		m--;
	}
}

int main( )
{
	int arr[6] = { 36,55,14,63,82,81 };
	SelectionSort(arr,6);
	for (int i = 0;i < 6;i++)
	{
		printf_s("%d", arr[i]);
	}
}

时间复杂度:
m + (m-1) + (m-2) +…+2=(m+2)*(m-1)/2
时间复杂度即为O(n2)

原创文章 24 获赞 2 访问量 926

猜你喜欢

转载自blog.csdn.net/weixin_43653187/article/details/104714259