简单选择 (c语言)排序

1.直接插入排序 insertionSort
2.希尔排序 shellSort
3.冒泡排序 bubbleSort
4.快速排序 partition分割 quickSort 快速排序
5.简单选择排序 selectionSort

第九单元:简单选择排序
属于:选择类排序s
稳定性: 不稳定的排序(存在着不相邻元素之间的比较和交换)
时间复杂度:O(n^2)
思想:第一趟选择最小的元素放在第一个位置上,第二趟选择第二小的元素放在第二个位置上…依次类推
n个元素采用简单选择排序 需要多少趟?n-1

n个记录采用简单选择排序 最好情况 需要多少趟?n-1 比较多少次?n*(n-1)/2 交换多少次? 0
n个记录采用简单选择排序 最坏情况 需要多少趟?n-1 比较多少次?n*(n-1)/2 交换多少次? n-1
注意:简单选择排序某一趟排序 最多交换1次 最少交换0次
简单选择排序某一趟排序的时间复杂度是O(n)

min 21, 25, 49, 25, 16, 8
min (1) 8 25 49 25 16 21*
min (2) 8 16 49 25 25 21*
min (3) 8 16 21 25 25 4*
min (4) 8 16 21 25 25 49 (5) 8 16 21 25* 25 49*

类 稳定性 时间复杂度
直接插入 插入类 稳定 O(n^2)
希尔 插入类 不稳定 O(n3/2)
冒泡 交换类 稳定 O(n^2)
快速 交换类 不稳定 O(n*log2n)
简单选择 选择类 不稳定 O(n^2)

下列排序算法中 任意一趟一定可以确定元素最终位置的有(CDE)
A 直接插入
B 希尔
C 冒泡
D 快速
E 简单选择

下列排序算法 比较的趟数和记录的初始状态无关的是
D B A
A 直接插入
B 希尔排序
C 优化的冒泡排序
D 简单选择排序

下列排序算法 比较的次数和记录的初始状态无关的是 (CD)
A 直接插入
B 希尔排序
C 普通的冒泡排序
D 简单选择排序

#define MAXSIZE 20
void selectionSort(float arr[],int len)//简单选择排序 按单价 升序排序     若单价降序?代码如何实现 
{
	int i; 
	int j; 
	float t;//交换变量 
	int  min;//记录最小元素的位置(下标) 
	for(i=0;i<len-1;i++)//外层循环控制趟数  0   -(len-2)
	{
		 min=i;
		 for(j=i+1;j<len;j++)//循环比较 
		 {
		 	if(arr[j]<arr[min])
		 	{
		 		min=j;//记录最小元素的位置(下标) 
			 }
		 }
		 if(min!=i)//交换 
		 {
		 	t=arr[min];
		 	arr[min]=arr[i];
		 	arr[i]=t;
		 }
	 } 
	
}
int  main()
{
	float arr[10];
	int i;
	for(i=0;i<10;i++)//循环录入10种商品的单价 
	{
		printf("请输入第%d种商品的单价:",i+1);
		scanf("%f",&arr[i]); 
		
	}
	selectionSort(arr,10);//调用函数
	for(i=0;i<10;i++)
	{
		printf("%.2f ",arr[i]);
	 } 
	
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林城步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值