选择排序:
public void sort(){int out,in,min;for(out=0;out<nElements-1;out++){min = out;for(in=out+1;in<nElements;in++)if(arr[in]<arr[min])min = in;swap(out,min);//将min放在out位置,out始终指向最小值的下一个位置,即下一个min要存放的位置 }}
选择排序改进了冒泡排序,将必要的交换次数从O(N^2)减少到O(N),但比较次数仍然为O(N^2).
min先指向第一个元素,in指向第二个元素,先与min比较,之后不断右移,过程中不断更新min的最小值。第一轮比较完成后,将最小值min与out交换,这样一轮下来比较N-1次(N为未排序个数),只交换一次。
初始状态:
in右移,min更新:
第一轮比较结束,数组中的最小值已经排好序,outer右移到待排序的第一个:
排序完毕: