网站域名如何影响seo,wordpress的模版文件夹,不用代码做网站 知乎,网络游戏名文章目录 1.概念✅2.选择排序#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅5.十大排序 1.概念✅ 排序是数据处理的基本操作之一#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法#xff0c;排序后的数据更易于处理和查找。在… 文章目录 1.概念✅2.选择排序3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅5.十大排序 1.概念✅ 排序是数据处理的基本操作之一每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法排序后的数据更易于处理和查找。在计算机发展的历程中在排序算法的研究一直深受人们重视出现了很多算法在思路、效率、应用等方面各有特色。通过学习排序算法读者可以理解不同算法的优势和局限性并根据具体情况选择最合适的算法以提高程序的性能和效率。学习排序算法还有助于培养逻辑思维和问题解决能力在解决其他类型的问题时也能够应用到类似的思维方法。
2.选择排序 选择排序Selection Sort是最简单、直观的排序算法虽然效率不高但是利于理解和实现。 排序的目的是什么例如对n个数从小到大排序就是把杂乱无序的n个数放到它们应该放的位置上。 最直接的做法是找到最小数放在第1个位置找到第2个小的数放在第2个位置......找到第n个数放在第n个位置。 这个思路就是排序具体操作描述如下 1第一轮在n个数中找到最小数然后与第1个位置的数交换这样就把最小数放到了第一位置如下图所示 2第二轮在第2~n个数中找到最小值然后与第2个位置的数交换这样就把地2小的数放到了第2个位置如下图所示 3第三轮在第3~n个数中找到最小的数… 一共执行n-1轮操作第i轮找到第i小的数放到第i个位置就排好序了。
3.代码实现✅
3.1 直接写✨
#include stdio.h
int main(){int a[10]{5,1,6,9,7,0,-5,10,95,63};int i,j,t,min;for(i0;i9;i)for(ji1;j10;j) if(a[i]a[j]){ta[i];a[i]a[j];a[j]t;}printf(排序后的顺序:);for(i0;i10;i) printf(%d ,a[i]);
}3.2 函数✨
#include stdio.hvoid selectionSort(int arr[], int n) {int i, j, minIndex, temp;// 外层循环遍历每一位for (i 0; i n - 1; i) {minIndex i; // 假设当前元素为最小值的索引// 内层循环找出当前未排序部分中的最小值for (j i 1; j n; j) {if (arr[j] arr[minIndex]) {minIndex j; // 更新最小值索引}}// 如果发现更小的值交换位置if (minIndex ! i) {temp arr[i];arr[i] arr[minIndex];arr[minIndex] temp;}}
}void printArray(int arr[], int n) {int i ;for (i 0; i n; i) {printf(%d , arr[i]);}printf(\n);
}int main() {int arr[] {5,1,6,9,7,0,-5,10,95,63}; // 原始数组int n sizeof(arr) / sizeof(arr[0]); // 数组大小selectionSort(arr, n); // 调用选择排序函数printf(排序后的数组: \n);printArray(arr, n); // 打印排序后的数组return 0;
}
4.总结✅ 选择排序算法的计算量是多少找最小的数需要比较n-1次找第2小的数需要比较n-2次......一共需要比较n^2/2次把它的计算复杂度记为O(n^2)。直接看代码也能得到这个结论有两重for循环分别循环n次共循环O(n^2)次。 将上述代码提交到判题系统只能通过20%的测试。判题系统一般给一秒的执行时间计算机一秒约能计算一亿次。本题20%的数据有n10^3能在一秒内完成。若n10^5选择排序需要的计算n^2100亿次超时。 选择排序是一种“死脑筋”的算法它与数据列的特征无关不管原数据列是不是有序都得计算O(n^2)次上一个“冒泡算法”就聪明得多如果第一能找到最大数发现数列已经有序就停止不再做排序计算。 选择排序虽然低效但也有优点1简单、易写2不占用额外的空间排序就在原理的序列上操作。 Perspective-takling 5.十大排序
1.冒泡排序