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个位置,作为有序区的开始,依次向后延伸,直到整个数组变有序区。
排序特点:
从前面开始有序化的,每一轮大循环有序化一个数组元素。