Java实现-高效排序算法之快速排序

快速排序时对冒泡排序的一种改进。

实现思想:通过一趟排序将待排序记录(数组)分割成独立的两部分,其中一部分的元素均比另一部分的元素要小,则可以对这两部分记录继续进行排序,从而达到整个序列有序。实现的本质是对递归的应用。

步骤一:找一个枢轴。最好的情况是找一个能够使两侧子数组的数目相等的元素。

步骤二:扫描数组,并将元素分配到两个子数组中。

//quicksort(Object[] array)

//    选择数轴tmp

//    将元素进行两侧划分成子数组suba1suba2

//    对子数组在进行快速排序

public classquicksort {

   public static void main(String[] args){

      int[] a ={8,5,4,7,6,1,6,3,8,12,10};

      if(a.length <= 0){

         return;

      }

      System.out.println("排序之前:\n"+Arrays.toString(a));

      quicksort(a,0, a.length-1);

      System.out.println("排序之后:\n"+Arrays.toString(a));

   }

   public static int getMiddle(int[] array, int low, int high){

      int tmp = array[low];//数组的第一个作为数轴

      while(low < high){

         //右侧元素大于数轴,high下标减1;否则(比数轴小)将其放在元素左侧

         while(low < high&& array[high] >= tmp){

            high--;

         }

         array[low]= array[high];//比数轴小的记录移动到左侧

         //左侧元素小于数轴,low下标加1;否则(比数轴大)将其放在元素右侧

         while( low < high&& array[low] <=tmp){

            low++;

         }

         array[high]= array[low];//比数轴大的元素放在右侧

      }

      array[low]= tmp;//数轴记录到最后

      return low;//返回数轴的位置

   }

   public static void quicksort(int[] list, int low, int high){

      if(low < high){

         int middle = getMiddle(list,low, high);//list数组一分为二

         quicksort(list,low, middle-1);

         quicksort(list,middle+1, high);

      }

   }

}

快速排序的平均时间复杂度是O(nlogn),但具体情况还要取决于选取枢轴对子数组的划分情况。

你可能感兴趣的:(Java实现-高效排序算法之快速排序)