排序算法简单选择排序

选择排序原理:循环查找n个元素中最小的元素,与第一个元素进行交换;继续查找n-1个元素中最小的元素,与第二个元素交换.....直至完成

简单选择排序
 1 #include <iostream>
2 using namespace std;
3
4
5 //元素交换
6 void swap(int &a,int &b)
7 {
8 int temp=a;
9 a=b;
10 b=temp;
11 }
12
13 /*///////////////////////////////////////////////
14 简单选择排序
15 */
16 void SelectSort(int *a,int len)
17 {
18 int i,j,pos,temp;
19 for(i=0;i<len-1;i++)
20 {
21 pos=i;
22 temp=a[i];
23 for(j=i+1;j<len;j++)
24 {
25 if(a[j]<temp) //若a[i]小于后面的元素,则保存较小元素的下标,
26 //并且将该元素的值保存在temp中,继续比较
27 {
28 pos=j;
29 temp=a[j];
30 }
31 }
32 swap(a[i],a[pos]);
33 }
34 for(i=0;i<len;i++)
35 cout<<a[i]<<" ";
36 cout<<endl;
37 }
38 /////////////////////////////////////////////////
39
40
41
42
43 int main()
44 {
45 int n,i,a[20];
46 cout<<"请输入数组元素n:"<<endl;
47 cin>>n;
48 cout<<"请输入"<<n<<"个元素:"<<endl;
49 for(i=0;i<n;i++)
50 cin>>a[i];
51 SelectSort(a,n);
52 return 0;
53 }

相比于冒泡排序算法,由于选择排序每次寻找最小元素使用的是数组下标作为标记,直到最后才进行交换移动的,所以减少了交换的次数。

需要的比较次数是固定的:n-1+n-2+n-3+…+1=n(n-1)/2次。

需要的交换次数:最好情况下为0次,最差情况下需要交换n-1次,总得时间复杂度为O(n^2)

原文地址:https://www.cnblogs.com/chenbin7/p/2197914.html