选择排序算法介绍
选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常数会更小,更有效率,尽管他们的最坏运行时间都是O(n2)。
选择排序算法Java实现
如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:
- publicclassArrayUtils{
- publicstaticvoidprintArray(int[]array){
- System.out.print("{");
- for(inti=0;i<array.length;i++){
- System.out.print(array[i]);
- if(i<array.length-1){
- System.out.print(",");
- }
- }
- System.out.println("}");
- }
- publicstaticvoidexchangeElements(int[]array,intindex1,intindex2){
- inttemp=array[index1];
- array[index1]=array[index2];
- array[index2]=temp;
- }
- }
逐步选取n-1到1(Java里面数组以0开始标记),分别作为第n,n-1,...,2层顶,第2层顶筑好了之后,只剩下一个比它小的元素,排序结束。每个顶的筑成算法如下:用maxIndex变量记录最大元素的位置,初始化为顶所在的位置(默认顶最大),从顶的前面一位到位置0,依次和当前的最大元素比较,如果比当前的最大元素大,maxIndex更新为新的位置,循环结束已经知道最大元素的位置maxIndex,如果最大元素不是顶,那么交换最大元素和顶。选择排序的Java实现以及测试代码如下:
- publicclassSelectSort{
- publicstaticvoidmain(String[]args){
- int[]array={9,8,7,6,5,4,3,2,1,0,-1,-2,-3,8};
- System.out.println("Beforesort:");
- ArrayUtils.printArray(array);
- selectSort(array);
- System.out.println("Aftersort:");
- ArrayUtils.printArray(array);
- }
- publicstaticvoidselectSort(int[]array){
- if(array==null||array.length<2){
- return;
- }
- intsize=array.length;
- for(inti=size-1;i>0;i--){
- intmaxIndex=i;
- for(intj=i-1;j>=0;j--){
- if(array[j]>array[maxIndex]){
- maxIndex=j;
- }
- }
- if(maxIndex!=i){
- ArrayUtils.exchangeElements(array,i,maxIndex);
- }
- }
- }
- }
选择排序算法介绍
选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常数会更小,更有效率,尽管他们的最坏运行时间都是O(n2)。
选择排序算法Java实现
如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:
- publicclassArrayUtils{
- publicstaticvoidprintArray(int[]array){
- System.out.print("{");
- for(inti=0;i<array.length;i++){
- System.out.print(array[i]);
- if(i<array.length-1){
- System.out.print(",");
- }
- }
- System.out.println("}");
- }
- publicstaticvoidexchangeElements(int[]array,intindex1,intindex2){
- inttemp=array[index1];
- array[index1]=array[index2];
- array[index2]=temp;
- }
- }
逐步选取n-1到1(Java里面数组以0开始标记),分别作为第n,n-1,...,2层顶,第2层顶筑好了之后,只剩下一个比它小的元素,排序结束。每个顶的筑成算法如下:用maxIndex变量记录最大元素的位置,初始化为顶所在的位置(默认顶最大),从顶的前面一位到位置0,依次和当前的最大元素比较,如果比当前的最大元素大,maxIndex更新为新的位置,循环结束已经知道最大元素的位置maxIndex,如果最大元素不是顶,那么交换最大元素和顶。选择排序的Java实现以及测试代码如下:
- publicclassSelectSort{
- publicstaticvoidmain(String[]args){
- int[]array={9,8,7,6,5,4,3,2,1,0,-1,-2,-3,8};
- System.out.println("Beforesort:");
- ArrayUtils.printArray(array);
- selectSort(array);
- System.out.println("Aftersort:");
- ArrayUtils.printArray(array);
- }
- publicstaticvoidselectSort(int[]array){
- if(array==null||array.length<2){
- return;
- }
- intsize=array.length;
- for(inti=size-1;i>0;i--){
- intmaxIndex=i;
- for(intj=i-1;j>=0;j--){
- if(array[j]>array[maxIndex]){
- maxIndex=j;
- }
- }
- if(maxIndex!=i){
- ArrayUtils.exchangeElements(array,i,maxIndex);
- }
- }
- }
- }