快速排序
快速排序的思想:
选择一个基准数(轴),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小。然后再按次方法对这两部分的数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数组变得有序。
排序过程大致如下:
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);
}
}
}