码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序算法Java实现

时间:2017-10-19 21:14:23      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:分数   示例   csharp   过程   pac   string   algorithm   void   内部排序   

1) 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行

示例:

package com.neuedu.algorithm;

public class QuickSort {
//快速排序
	
	
	public static void main(String [] args) {
		
		int [] array= {323,6,66,78,23,567,-1};
		System.out.println("排序之前:");
		for (int i : array) {
			System.out.print(i+"  ");
		}
		quickSort(array, 0, array.length - 1);
	
	}

   private static void quickSort(int[] arr, int _left, int _right) {
	   int left=_left;
	   int right=_right;
	   int temp = 0;
		if(left <= right){   //待排序的元素至少有两个的情况
			temp=arr[left];
			while(left !=right){
				while(right>left&&arr[right]>=temp)//找到右边第一个小于基准的数
					right--;
				arr[left]=arr[right];
				while(right>left&&arr[left]<=temp)//找到左边第一个大于基准的数
					left++;
				arr[right]=arr[left];
			}
           arr[right] = temp;    //基准元素归位
           quickSort(arr,_left,left-1);  //对基准元素左边的元素进行递归排序
           quickSort(arr, right+1,_right);  //对基准元素右边的进行递归排序
       }  
    }
}

  

分析

快速排序的时间主要耗费在划分操作上,对长度为k的区间进行划分,共需k-1次关键字的比较。

最坏情况是每次划分选取的基准都是当前无序区中关键字最小(或最大)的记录,划分的结果是基准左边的子区间为空(或右边的子区间为空),而划分所得的另一个非空的子区间中记录数目,仅仅比划分前的无序区中记录个数减少一个。时间复杂度为O(n*n)

在最好情况下,每次划分所取的基准都是当前无序区的"中值"记录,划分的结果是基准的左、右两个无序子区间的长度大致相等。总的关键字比较次数:O(nlgn)

尽管快速排序的最坏时间为O(n2),但就平均性能而言,它是基于关键字比较的内部排序算法中速度最快者,快速排序亦因此而得名。它的平均时间复杂度为O(nlgn)。

快速排序算法Java实现

标签:分数   示例   csharp   过程   pac   string   algorithm   void   内部排序   

原文地址:http://www.cnblogs.com/lc-java/p/7694244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!