快速排序(Java版本)

(此排序方法主要点就是递归的应用)

package 排序;


import java.util.Arrays;

/**
* 快速排序
*/
public class demo1 {
public static void main(String[] args) {
int a[] = {1, 8, 2, 4, 3, 9, 5, 6};
go(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}

/**
* 进行排序,找出分界值,然后依据分界,将左右两部分继续进行排序
*/
public static void go(int[] a, int left, int right) {
if (left < right) {
int mid = qsort(a, left, right);
go(a, 0, mid - 1);
go(a, mid + 1, right);
}
}

/**
* ---排序的具体实现---
* 1、首先以left索引的值作为比较元素,从数组的right依次往前推进,直到右边的值大于左边的值,跳出第一个while循环
* 2、执行交换方法,进行第二个循环
* 3、还是以left索引作为参照,但是这次循环中索引是从left往后推进,直到右边的值大于左边的值,跳出第二个while循环
* 4、执行交换方法,进行第二轮循环
* 5、当left>right之后整个循环结束,返回left的值即为分界值
*/
public static int qsort(int[] a, int left, int right) {
while (left < right) {
while (left < right && a[left] <= a[right]) {
right--;
}
if (left < right) {
swap(a, left, right);
}
while (left < right && a[left] <= a[right]) {
left++;
}
if (left < right) {
swap(a, left, right);
}
}
return left;
}

/**
* 交换
*/
public static void swap(int[] a, int left, int right) {
int temp = a[left];
a[left] = a[right];
a[right] = temp;
}
}



猜你喜欢

转载自www.cnblogs.com/Rando_M/p/11823483.html
今日推荐