深圳互助资金盘网站开发,简述一个网站开发流程,想做跨境电商怎么入门,校园网网站建设规划书文章目录 例题原理阐述代码实现总结 例题 原理阐述
从小到大排序#xff0c;每次选择序列的最小的一个数#xff1b; 将原来的序列A分割为排好序的序列a和未排序的序列b#xff1b; 从未排好序的序列b中找到最小值#xff0c;插入到排好序的序列a后面#xff0c;形成从小… 文章目录 例题原理阐述代码实现总结 例题 原理阐述
从小到大排序每次选择序列的最小的一个数 将原来的序列A分割为排好序的序列a和未排序的序列b 从未排好序的序列b中找到最小值插入到排好序的序列a后面形成从小到大的序列。 依次循环直到最后b序列剩下最后一个数。
时间复杂度分析 大循环为nn为A序列的长度小循环为mm的取值依次为“n,n-1,n-2,…,n-i”。 n ∗ n O ( n 2 ) n*nO(n^2) n∗nO(n2)
题目思路
以上面的例题为例样例输入十个整数作为一个序列A。
先将序列A的第一个数作为最小值min再遍历整个序列找到比min还小的数记录下这个最小值对应的下标再交换这个最小值与序列的第一个数使得A序列的第一个数为最小值此时A被分为已排序序列a未排序序列b。 重复上面的操作直到b为最后一个数。
代码实现
#includeiostream
using namespace std;
int main () {int a[10];for(int i0;i10;i)cina[i];//选择排序//每次选择最小的一个数for(int i0;i10;i){ int minNuma[i];int k0;for(int ji;j10;j){if(minNuma[j]){minNuma[j];kj;}}int temp a[i];a[i]a[k];a[k]temp;if(i9)couta[i];elsecouta[i]endl;}return 0;
}总结
和冒泡排序类似都是通过两层遍历。选择排序是每次找最小或者最大并把它放到序列最前面或者最后面。冒泡排序是通过两两交换每次遍历也是确定序列的最大或最小值。两者对比来说冒泡排序的交换平均频率比选择大的多选择排序只需要找到最大或最小再最后交换一次即可。冒牌则一直需要比较交换。