[C语⾔]选择排序之鸡尾酒排序的特性及实现
C语⾔] 选择排序之鸡尾酒排序的特性及实现
1、算法特性
网页素材图片网站 鸡尾酒排序⼜称定向冒泡排序法,是⼀种稳定的选择排序⽅法,排序效果稍优于冒泡排序。
其时间复杂度最好情况为O(n)、最差与平均情况为O(n²),空间复杂度为O(1)。
2、算法思路:
以升序排列为例,先设置两个临时变量index_nmin与index_nmax分别存储最⼩值与最⼤值的下标,初始⼀般假设index_nmin与index_nmax均为0,再将选定值与其之后的数据依次⽐较:当⽐较值⽐选择值⼩/⼤
时,index_nmin/index_nmax更新为⽐较值的下标,之后继续检索,直到⽆序序列部分结束为⽌;⼀轮检索过后将
arr[index_nmin]与⽆序序列队⾸、arr[index_nmax]与⽆序序列队尾交换位置,经过len/2次循环便可以将所有数据排列有序。
这⾥需要注意的是,在最⼩/最⼤值与相应位置交换之后需要多⼀道核实流程:在最⼩/最⼤值交换完毕后,检查最⼤/最⼩值的下标是否是i-1/len-i,若是,则要将最⼤/最⼩值与下标i-1/len-i交换;若不是,则继续正常交换。其⽬的是避免最⼤最⼩值最终位置错乱。
3、实现代码
1 #include <stdio.h>
2
3// 鸡尾酒排序:选择排序⼀种变化形式
4void cooktail_sort(int arr[],int len)
5 {
6for(int i=1; i<=len/2; i++)
7 {
8int max = i-1;
9int min = i-1;
10for(int j=i; j<=len-i; j++)
11 {
12if(arr[j] > arr[max])
13 {
14 max = j;
15 }
16if(arr[j] < arr[min])
17 {
冒泡排序代码c语言18 min = j;
19 }vlookup函数使用视频教程
20 }
21if(max != len-i)
22 {
句柄数最大值>数据结构知识点总结pdf23int tmp = arr[len-i];
24 arr[len-i] = arr[max];
25 arr[max] = tmp;
26 }
27if(min == len-i) // 最⼩值的位置正好在本来应该存储最⼤值位置经过上⾯交换之后最⼩值放到了max位置上28 {
29int tmp = arr[i-1];
30 arr[i-1] = arr[max];
31 arr[max] = tmp;
32 }
33else if(min != i-1)
34 {
35int tmp = arr[i-1];
36 arr[i-1] = arr[min];
37 arr[min] = tmp;
38 }
39 }
40 }
41
react antd42void travel(int arr[],int len)
43 {
44for(int i=0;i<len;i++)
45 {
46 printf("%d ",arr[i]);
47 }
48 printf("\n");
49 }
50
51int main()
52 {
53int arr[] = {53,82,9,233,43,14,55,9,4,67};
54int len = sizeof(arr)/sizeof(arr[0]);
55
56 travel(arr,len);
57 select_sort(arr,len);
58 travel(arr,len);
59
60/* travel(arr,len);
61 cooktail_sort(arr,len);
62 travel(arr,len);*/
63
64return0;
65 }
4、测试结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论