【算法-c描述】 选择排序

简要描述和分析,做记录用。

算法说明

找到数组中的最小元素,将它和数组的第一个元素交换交换位置(如果第一个元素就是最小元素,那么它就和自己交换);在剩下的元素中找到最小的元素,将它与数组的第二个元素交换。如此往复,直到将整个数组排序,这种排序算法叫做选择排序,因为它在不断地选择剩余元素之中的最小元素。

总的来说,选择排序是一种很容易理解和实现的简单排序算法,它有两个鲜明的特点。

  • 运行时间和输入无关。
    在找出最小元素而扫描一遍数组并不能为下一边扫描提供任何信息,在使用选择排序的时候,你会发现,一个已经有序的数组或者是所有元素都相等的数组和一个元素随机排列的数组所用的排序时间一样长
  • 数据移动是最少的。
    每次交换都会改变两个元素的值,因此选择排序用了N次交换-----交换次数和数组的大小是线性关系。

算法实现

选择排序算法

void select_sort(int *array, int len)
{
	int i, j;

	for(i=0; i<len; i++)
	{
		int min = i;  //最小元素的索引
		int tmp;
		
		/*将a[i]中的元素与a[i+1..len]中最小的元素交换*/
		for (j = i+1; j<len; j++)
		{
			if(array[j] < array[min]) min = j;   //交换最小元素的索引值
		}
		
		/*将a[i]的数值与最小的元素值进行交换*/
		tmp = array[i];
		array[i] = array[min];
		array[min] = tmp;
	}
}

主程序

#include <stdio.h>
void print_array(int *array, int len)
{
	int i;
	
	for (i = 0; i < len; ++i)
	{
		printf("%d ", array[i]);
	}
	printf("\n");
}

int main(int argc, char const *argv[])
{
	int array[10] = {3, 33, 22, 12, 5, 26, 10, 1, 52, 7};
	int i;
	int len = sizeof(array)/sizeof(array[0]);

	printf("排序前:\n");
	print_array(array, len);

	select_sort(array, len);

	printf("排序后:\n");
	print_array(array, len);
	return 0;
}

运行效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值