import java.util.Arrays;
public class Test9 {
public static void main(String[] args) {
// 算法实现方法java实现第一趟排序
// int[] arry = { 49, 38, 65, 97, 76, 13, 27 };
int[] arry = { 234, 454, 234, 890, 456, 678, 575 };
// 程序还有问题.比如当数据为49,38, 65, 97, 76, 13, 27,12,11
// 的时候,第一次就把最小一位放到第一位,,而出现问题
Test9.method2(arry);
Arrays.sort(arry, 0, arry.length);
for (int i = 0; i < arry.length; i++) {
System.out.println("结果:" + arry[i]);
}
}
/**
* 快速排序
*
* @param arry
*/
public static void method2(int[] array) {
// 1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;
int i = 0;
int j = array.length - 1;// 获取数组最后一位
// 2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];
int k = array[0];// 获取数组第一位
int f = 0;
boolean check = false;
int x = 0;
while (i != j || i < j) {
// 3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key的值A[J],A[j]与A[i]交换;
while (array[j] > k) {
j--;
}
int temp = k;
k = array[j];
array[j] = temp;
// [49, 38, 65, 97, 76, 13, 27] //[27, 38, 65, 97, 76, 13, 49]//[27,
// 38, 49, 97, 76, 13, 65]
// [27, 38, 49, 97, 76, 49, 65] //[27, 38, 13, 97, 76, 49, 65]//[27,
// 38, 13, 49, 76, 97, 65]
// [27, 38, 13, 49, 76, 97, 65]
// 4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key的A[I],A[j]与A[i]交换;
while (array[i] < k) {
i++;
}
int temp1 = k;
k = array[i];
array[i] = temp1;
// [27, 38, 65, 97, 76, 13, 49] //[27, 38, 49, 97, 76, 13, 49]
// //[27, 38, 49, 97, 76, 13, 65]
// [27, 38, 13, 97, 76, 49, 65] //[27, 38, 13, 49, 76, 49, 65]
// //[27, 38, 13, 49, 76, 97, 65]
System.out.println(array[i] + " " + array[j]);
if (array[i] == array[j]) {
x++;
if (x > (array.length / 2 + 1)) {
check = true;
}
}
if (i == j || check) {
k = array[0];// 获取数组第一位
if (i == j && i == 0) {
k = array[1];
}
i = 0;
j = array.length - 1;// 获取数组最后一位
check = false;
x = 0;
if (f > (array.length / 2 + 1)) {
k = array[j];
}
if (f == array.length) {
break;
}
f++;
}// [27, 38, 13, 49, 76, 97, 65] //[13, 27, 38, 49, 76, 97, 65]
}
}
}
// 运行结果:27 38 13 49 76 97
// 65快速排序就是递归调用此过程——在以49为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列,根据这种思想对于上述数组A的快速排序的全过程如图6所示:初始状态
// {49 38 65 97 76 13 27} 进行一次快速排序之后划分为 {27 38 13} 49 {76 97 65} 分别对前后两部分进行快速排序
// {27 38 13} 经第三步和第四步交换后变成 {13 27 38} 完成排序。{76 97 65} 经第三步和第四步交换后变成 {65 76 97}
// 完成排序。图示
11-快排(排序)
最新推荐文章于 2017-03-02 19:33:15 发布