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;
}