数据结构——C语言实现选择排序算法

1.算法思想

       在一组数列中选择最小的放在数列的第一个位置,再从剩下的数列中找最小的放在第二个位置,以此类推,依次找到到最小的数。
       在实现的过程中:
       我们可以先设第一个元素为最小的数,设一个指针min指向第一个元素;
       然后将这个数与后面的数作比较,若后面有数小于这个数,则将指针指向这个更小的数,以此类推,整个比较下来,min就指向了整个数列中最小的数;
       每一轮都按照这个方法,因此我们可以分析出,总共需要两层循环,第一层是要选择为序列的第几位找出最小数,第二层循环是选出这个最小的数是几。

2.算法实现

#include<stdio.h>
#define MAX 20
void choice (int array[],int len)
{
	int i,j,temp;
	int min;
	for(j = 0;j < len-1;j++) //这层循环控制的是轮数
	{
		min = j; //设最左边的值为最小值
		for(i = j+1;i < len;i++) //从第二个值开始依次与最小值比较
		{
			if(array[i] < array[min]) //当有比array[min]更小的值时
				min = i; //将i赋给min
		} //这层循环结束后,找到本轮最小值array[min]
		temp = array[j];//将刚开始设的最小值与现在找出来真正的最小值调换位置
		array[j] = array [min];
		array[min] = temp;
	}
	printf("排序后为:\n");
	for(j = 0;j < len;j++)
		printf("%d  ",array[j]);
}
void main()
{
	int i;
	char ch;
	int a[MAX];
	int count = 0;
	printf("请输入要排序的数\n");
	for(i = 0;ch != '\n';i++)
	{
		scanf("%d",&a[i]);
		ch = getchar();
	}
	choice(a,i);
}

3.算法分析

       简单选择排序中,需要进行的比较次数与初始状态下待排序数列的排序情况无关,当i = 1时,需要进行n - 1次比较,当i = 2时需要进行n - 2次比较,因此进行比较操作的时间复杂度为O(n²)
       在交换记录时,需要一个辅助空间,因此空间复杂度为O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值