受欢迎的南昌网站建设,网站建设方案报价费用明细价格,免费流程图制作网站,如何编写网站建设[C语言] 选择排序之直接选择排序的特性及实现 1、算法特性 直接选择是一种简单、不稳定的选择排序方法#xff0c;属于最为基础的排序方法之一。 其时间复杂度最好情况为O#xff08;n#xff09;、最差为O#xff08;n#xff09;、平均为O#xff08;n#xff09;属于最为基础的排序方法之一。 其时间复杂度最好情况为On²、最差为On²、平均为On²空间复杂度为O1。 2、算法思路 以升序排列为例先设置一个临时变量index_nmax存储最大值的下标初始一般假设为下标0再将选定值与其之后的数据依次比较当比较值比选择值大时index_nmax更新为比较值的下标之后继续检索直到无序序列结束为止当比较值小于等于插入值时index_nmax不更新选择值继续向后检索直到无序序列结束为止。一轮循环过后将arr[index_nmax]与无序序列队尾交换位置经过len-1循环便可以将所有数据排列有序。 下图与本博客算法本质上是相同的博客中选择最大值来排序图中是选择最小值来排序 3、实现代码 1 #include stdio.h2 3 // 选择排序相邻两个元素进行比较把大的元素的下标记录下来一轮完整的比较之后若最大值的下标不是len-i则两个元素交换位置4 void select_sort(int arr[],int len)5 {6 for(int i0; ilen; i) // 总共要找len-1次最大值,每次找最大值的区间 [0,len-i]7 {8 int index_nmax 0;9 for(int j1; jlen-i; j) // 因为假设了0下标就是最大值所以循环可以从1开始
10 {
11 if(arr[j] arr[index_nmax])
12 {
13 index_nmax j;
14 }
15 }
16 if(index_nmax ! len-i-1) // 避免无意义的位置交换
17 {
18 int tmp arr[index_nmax];
19 arr[index_nmax] arr[len-i-1];
20 arr[len-i-1] tmp;
21 }
22 }
23 }
24
25 int main()
26 {
27 int arr[] {53,82,9,233,43,14,55,9,4,67};
28 int len sizeof(arr)/sizeof(arr[0]);
29
30 travel(arr,len);
31 select_sort(arr,len);
32 travel(arr,len);
33
34 /* travel(arr,len);
35 cooktail_sort(arr,len);
36 travel(arr,len);*/
37
38 return 0;
39 } 4、测试结果 转载于:https://www.cnblogs.com/usingnamespace-caoliu/p/9428115.html