选择排序法
Posted icesunbo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序法相关的知识,希望对你有一定的参考价值。
思路:
选择排序法是一种非常直观的算法,它会在计算每个计算步骤中选出一个最小值,进而完成排序。
模板:
selectionSort(A ,N) //包含N个元素的0起点数组A for i 从 0到 N-1 min=i for j 从 i到N-1 if A[j] < A[min] min = j A[ i ]与A[ min ]交换 _________________________________________ void selectionSort(A[] ,N) int i,j,t,min; for(i=0;i < N-1;i++) min = i; for(j = i;j < N;j++) if(A[j] < A[min]) min =j; if( i != min) t = A[ i ]; A[ i ] = A[min]; A[min] = t;
C++模板:
#include<bits/stdc++.h> using namespace std; void selectionSort(int a[],int n) int i,j,t,min; for(i=0;i<n-1;i++) min=i; for(j=i+1;j<n;j++) //个人喜欢用j=i+1,而不是j=i if(a[j]<a[min]) min=j; if(i!=min) t=a[i]; a[i]=a[min]; a[min]=t; int main() int a[100],n,i; cin>>n; for(i=0;i<n;i++) cin>>a[i]; selectionSort(a,n); for(i=0;i<n;i++) if(i) cout<<" "; cout<<a[i]; cout<<endl; return 0;
时间复杂度:
由于选择排序法会直接交换两个不相邻的元素,所以属于不稳定的排序算法。
然后再来看看选择排序法的复杂度。假设数据总数为N,那么无论在何种情况下,选择排序法都需要进行(N - 1) + (N - 2) + ··· + 1 = (N2 - N)/2次比较运算,用于搜索未排序部分的最小值。因此该算法的复杂度与N2基本成正比,即复杂度数量级为O(N2)。
现在,让我们回过头来看看这三种排序算法(插入、冒泡、选择),比较一下它们的特征。冒泡排序法与选择排序法相比,一个从局部入手减少逆序元素,一个放眼大局逐个选择最小值,二者思路大不相同。但是,它们又都有着“通过 i 次外层循环,从数据中顺次求出 i 个最小值”的相同特征。相对的,插入排序法是通过 i 次外层循环,直接将原数组的 i 个元素重新排序。另外,不含flag的简单冒泡排序法和选择排序法不依赖数据,即比较运算次数(算法复杂度)不受输入数据的影响,而插入算法在执行时却依赖数据,处理某些数据是具有很高的效率。
例题:
请编写一个程序,读取数列 A,利用选择排序法将其按升序排列并输出。程序中需包含上述伪代码所表示的算法。
另外,请输出程序实际运行过程中执行交换操作(即伪代码第 7 行中 i 与 min不相等的情况)的次数。
输入:在第 1 行输入定义数组长度的整数N。在第 2 行输入 N个整数,以空格区分。
输出:输出总计 2 行。请在第 1 行输出排序后的数列。数列相邻元素用 1 个空格隔开。第 2 行输出交换次数。
限制:1≤ N ≤ 100
0≤ A的元素 ≤ 100
输入示例
6 5 6 4 2 1 3
输出示例
1 2 3 4 5 6 4
C++代码:
#include<bits/stdc++.h> using namespace std; int selectionSort(int a[],int n) int i,j,t,sum=0,min; for(i=0;i<n-1;i++) min=i; for(j=i;j<n;j++) if(a[j]<a[min]) min=j; if(i!=min) t=a[i]; a[i]=a[min]; a[min]=t; sum++; return sum; int main() int a[100],n,i,sum; cin>>n; for(i=0;i<n;i++) cin>>a[i]; sum=selectionSort(a,n); for(i=0;i<n;i++) if(i) cout<<" "; cout<<a[i]; cout<<endl; cout<<sum<<endl; return 0;
例题网址:
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_2_B
以上是关于选择排序法的主要内容,如果未能解决你的问题,请参考以下文章