选择排序之我见

选择排序比冒泡排序难度稍微大一点点。请看代码

#include<stdio.h>
#define N 10
int a[N] = {10,9,8,7,6,5,4,3,1,2};
void xuanze(int *a,int n)
{
	int i,j,min,temp;
	for(i=0;i<n-1;i++)
	{
		min = i;  				//初始最小元素下标 
		for(j=i+1;j<n;j++)
		{
			if(a[min]>a[j])  	 
			{
				min = j;		//这样写只有赋值操作,比某种可能每次都交换值的写法快。	
			}
		}	
		temp=a[i];
		a[i]=a[min];
		a[min]=temp;
	}
}
void print()
{
	int i;
	for(i=0;i<10;i++)
	{
		printf("%4d",a[i]);
	}
	printf("\n");
}
int main()
{
	print();
	xuanze(a,N);
	print();
	return 0;
}



### 回答1: 好的,选择排序的流程图如下:(见下图) (注:此处为文字描述,AI模型无法绘制流程图,请读者自行搜索查看) 首先,从序列中找到最小的元素,将其放在序列的起始位置; 然后,从剩余未排序的元素中继续寻找最小的元素,放到已排序序列的末尾; 重复上述步骤,直到所有元素均排序完毕。 这就是选择排序的流程。 ### 回答2: 选择排序是一种简单直观的排序算法,它的基本思想是每次从待排序的元素中找到最小(或最大)的元素,放到已排序序列的末尾。通过不断重复这个过程,直到所有元素都排序完毕。 选择排序的流程图如下: 1. 将待排序的序列分为有序区和无序区,初始时整个序列都是无序区。 2. 在无序区中找到最小(或最大)的元素,暂时记为最小元素,将其与无序区的第一个元素交换位置。 3. 此时,最小元素已经排在有序区的末尾,无序区的长度减1。 4. 重复第2步和第3步,直到无序区的长度为0,即所有元素都排好序。 选择排序的特点是每次遍历无序区要找到最小(或最大)的元素,并将其放到有序区的末尾。这种方式保证了每次遍历都能找到无序区中的最小元素,并将其放到正确的位置,因此选择排序是一种稳定的排序算法。 选择排序的时间复杂度为O(n^2),其中n为待排序序列的长度。虽然它的时间复杂度较高,但是由于其简单直观的特点,选择排序在实际应用中仍然有一定的价值。 ### 回答3: 选择排序是一种简单直观的排序算法,它的基本思想是每次在待排序元素中选择最小(或最大)的元素,放置在已排序序列的末尾。下面是选择排序的流程图: 1. 设定数组的长度为n,从数组的第一个元素开始,依次遍历数组。 2. 在当前遍历的位置,将该位置作为最小元素的索引,将当前位置后面的元素依次与最小元素比较,找到最小元素的位置。 3. 将遍历位置与最小元素的位置交换,即将最小元素放置在已排序序列的末尾。 4. 重复步骤2和步骤3,直到遍历完所有元素。 5. 完成上述操作后,数组就按照从小到大的顺序排列。 例如,对于数组[5, 2, 8, 1, 9]进行选择排序的过程如下: 1. 第一次遍历,最小元素的索引为0,最小元素为1,将1与5交换位置,数组变为[1, 2, 8, 5, 9]。 2. 第二次遍历,从索引1开始,最小元素的索引为3,最小元素为5,将5与2交换位置,数组变为[1, 2, 8, 5, 9]。 3. 第三次遍历,从索引2开始,最小元素的索引为3,最小元素仍然为5,数组不变。 4. 第四次遍历,从索引3开始,最小元素的索引为3,最小元素为5,数组不变。 5. 第五次遍历,从索引4开始,最小元素的索引为4,最小元素为9,将9与5交换位置,数组变为[1, 2, 8, 5, 9]。 经过以上遍历,数组从小到大排序完毕,最终结果为[1, 2, 5, 8, 9]。这就是选择排序的基本流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值