11-快排(排序)

来源:互联网 发布:ubuntu安装python 编辑:程序博客网 时间:2024/04/30 00:16
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}// 完成排序。图示

原创粉丝点击