简单选择排序

a0,a1,a2 ....aN-2,aN-1

第1轮循环 面对a0,a1,a2 ....aN-2,aN-1,设此集合中的第1个值a0为初始最小值,循环后确定a0值
第2轮循环 面对a1 a2 ....aN-2,aN-1,设此集合中的第1个值a1为初始最小值,循环后确定a1
第3轮循环 面对a2 ....aN-2,aN-1,循环后确定a2

...

第N-1轮循环 面对aN-2,aN-1,循环后确定aN-2(最后一个元素aN-1位置卡定)

小循环 for(int j=x,j<N,j++)

让小循环的变量作为大循环的区间量

大循环for(int x=m,x<n,x++)

由大循环次数得:n-m = N-1

由第一次小循环的x值得:m=0

所以m = 0,n =N-1

 

for(int i=0,i<N-1;i++){
  int minValueIndex =i;
for(int j=i,j<N,j++)
{
} }

简单选择排序代码如下:

 1 /*交换两个数*/
 2 void Swap(int& a, int& b)
 3 {
 4     a ^= b;
 5     b ^= a;
 6     a ^= b;
 7 }
 8 void Display(int a[],int len)
 9 {
10  for( int i=0; i<len; i++)
11  cout << a[i] << ' ';
12  cout<<endl;
13 }
14 void SelectSort(int a[], int len)
15 {
16     for(int i=0; i<len-1; i++)
17     {
18         //以第1个待排元素为参照,找最小值。
19         int minValueIndex = i;
20         for(int j=i或(i+1);j<len;j++)
21         {
22             if(a[j]<a[minValueIndex])
23                minValueIndex = j;
24          }
25         //如果参照值和最小值不是同一个元素则交换位置。
26         if(minValueIndex != i)
27           Swap(a[i],a[minValueIndex]);
28     }
29 }

升序选择排序思路:

数组分成有序区和无序区,初始时整个数组都是无序区。排序时,首先从无序区一个最小的元素(索引)直接放到第1个位置,作为有序区的开始,依次向后延伸,直到整个数组变有序区。

排序特点:

从前面开始有序化的,每一轮大循环有序化一个数组元素。

原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/4491884.html