Java数组-选择排序-排序的性能问题

来源:互联网 发布:mac 设置用户头像 编辑:程序博客网 时间:2024/06/05 04:16

之前的选择排序代码为:

class SelectionSort
{
 public static void main(String[] args)
 {
  
  int[] arr = {14,19,11,109,56,3};


  selectionSort(arr);
  System.out.println("Hello World!");
  for(int x=0;x<arr.length;x++)
  {
   System.out.print(arr[x]+",");
  }
 }

 /*
 选择排序
 */
 public static void selectionSort(int[] arr)
 {
  for(int x=0;x<arr.length-1;x++)
  {
   for (int y=x+1;y<arr.length ;y++ )
   {
    if(arr[x]>arr[y])
    {
     //把最小的数,排序到前面
     int temp = arr[x];
     arr[x] = arr[y];
     arr[y] = temp;
    }
   

   }
   for(int z=0;z<arr.length;z++)
   {
   System.out.print(arr[z]+",");
   }
   System.out.println();
  }
  
 }
}

从程序中可以看出选择排序中是通过x循环1,y循环一遍,找出当前遍历的这组数中的最小值,而每当y循环1,就将比较的两个数中较小的放在前面,就是说,当x=0时,y循环一遍,仅仅将数组中最小的数字替换到数组的第一个元素里;而当x=1时,则是从数组的第二个元素开始遍历,找出数组剩余元素的最小值,替换到第二个数组元素处。但是每当y循环1时,比较的两个数,后面的数小时,就会进行换位,这样,换位的次数就会比较多,那么可不可以找出遍历的那部分数组中的最小值之后再进行元素位置替换呢?显然是可以的。

下面是对选择排序部分的改进:

public static void selectionSort2(int[] arr)
 {
  
  for(int x=0;x<arr.length-1;x++)
  { 
      int num = arr[x];
      int index = x;
      for(int y=x+1;y<arr.length;y++)
     {
        if(num>arr[y])
        {
         num=arr[y];
         index = y;
        }
     }
      if(index!=x)
   {

       int temp = arr[x];
       arr[x] = arr[y];
       arr[y] = temp;

    }
  }
 }

选择排序改进后的整个程序为:

/*
考虑到性能问题,对选择排序法进行一定的改良
思路:找到数组中的最小元素,将其和arr[0]换位,一次类推进行换位
 换位次数相比之前的选择排序法,效率明显提高

实现: 一个变量记录最小值,一个变量记录最小值的索引
*/

class SelectionSort2
{
   public static void main(String[] args)
   {
      System.out.println("Hello World!");
      int[] arr={34,19,11,109,3,56};
      selectionSort2(arr);
      printArray(arr);
    }

    public static void selectionSort2(int[] arr)
    {
  
        for(int x=0;x<arr.length-1;x++)
        { 
            int num = arr[x];
            int index = x;
            for(int y=x+1;y<arr.length;y++)
            {
                if(num>arr[y])
                {
                     num=arr[y];
                     index = y;
                 }
             }
           if(index!=x)
           swap(arr,x,index);
       }
    }
   public static void swap(int[] arr,int x,int y)
   {
         int temp = arr[x];
         arr[x] = arr[y];
         arr[y] = temp;
   }
   public static void printArray(int[] arr)
  {
         for(int x=0;x<arr.length;x++)
        {
             if(x<arr.length-1)
                System.out.print(arr[x]+",");
             else
                System.out.println(arr[x]);
         }
  }
 
}




0 0
原创粉丝点击