每日算法之——快速排序

快速排序

快速排序的思想:

选择一个基准数(轴),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小。然后再按次方法对这两部分的数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数组变得有序。

排序过程大致如下:

1.选定一个基准数(temp)作为轴,通常选最左或者最右的数作为轴;

2声明两个变量i,j,i指向数组的最左端,j指向数组的最右端。

3.i,j分别交替向后向前走,如果A[j]>temp,则j–;否则A[i++]=A[j];然后i往后走,如果A[i]<temp,i++,否则A[j–]=A[i],当i>=j的时候,停止交替走,此时将temp赋值给A[i]。这样就完成一趟排序。

4.分别对轴左右两边的数据进行快速排序。

代码如下:

public class QuickSort {
	public static void main(String[] args) {
		int[] nums = new int[] { 2, 3, 5, 7, -1, -8, 6, 9, 10 };
		quickSort(nums, 0, nums.length-1);
		for(int i=0;i<nums.length;i++) {
			System.out.print(nums[i]+"  ");
		}
	}

	public static void quickSort(int[] nums, int left, int right) {
		if (left < right) {
			int temp = nums[left];
			int i = left;
			int j = right;
			while (i < j) {
				while (i < j && nums[j] > temp) {
					j--;
				}
				if (i < j) {
					nums[i++] = nums[j];
				}
				while (i < j && nums[i] < temp) {
					i++;
				}
				if (i < j) {
					nums[j--] = nums[i];
				}
			}
			nums[i] = temp;
			quickSort(nums, left, i - 1);
			quickSort(nums, i + 1, right);
		}
	}
}

 

点赞