选择排序思路:不像冒泡排序那样每次找到比它小的就交换,而是要选择最小的,只交换一次就够了。
代码实现如下:
public void sort(){ int out,in,min; for(out = 0; out < nElement; out++){ min = out; for(in = out+1; in < nElement; in++){ if(a[in] < a[min]){ min = in; } } swap(out,min); } }
选择排序最大的特点就是交换移动数据次数相当小,这样就可以节约时间。分析它的时间复杂度发现,无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行n-i次关键字的比较,此时需要比较(n-1)+(n-2)+...+1=n(n-1)/2次。对于交换次数而言,当最好的时候,交换为0次,最差的时候,也就初始降序时,交换次数为n-1次,基于最终的排序时间是比较与交换的次数总和,因此,总的时间复杂度为O(n^2)。
虽然跟冒泡法排序的时间复杂度是一样的,但在性能上选择排序比冒泡法排序更优一些。
时间: 2024-11-14 06:24:11