通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
前期准备工作(包括相关工具或所使用的原料等)eciplse-luna-32jdk1.7 详细的操作方法或具体步骤
基本思路
QUICKSORT(A, p, r)1 if p < r2 then q ← PARTITION(A, p, r) //关键3 QUICKSORT(A, p, q - 1)4 QUICKSORT(A, q + 1, r)
数组划分快速排序算法的关键是PARTITION过程,它对A[p..r]进行就地重排:PARTITION(A, p, r)1 x ← A[r]2 i ← p - 13 for j ← p to r - 14 do if A[j] ≤ x5 then i ← i + 16 exchange A[i] <-> A[j]7 exchange A[i + 1] <-> A[r]8 return i + 1
程序设计:
public static void quickSort(List
int quickMove;
if(s quickMove=partition(a,s,e); quickSort(a,s,quickMove-1); quickSort(a,quickMove+1,e); } } ///序列的划分 使用最后固定的一项 private static int partition(List temp=a.get(e); i=s-1; ////这个地方是不断的遍历所有的列表的前面的所有的数据项发现比参照数据小的数据项 ////然后和最前面比参照项大的数据项进行交换 for(int j=s;j if(a.get(j).compareTo(temp)<0){ i=i+1; Collections.swap(a, i, j); } } // if((i+2)==e) // { // return i+1; // } Collections.swap(a, i+1, e); return i+1; } 原来出现错误结果: 修改代码部分: 功能方法代码乘上: package ch2.divide; import java.util.Collections; import java.util.Comparator; import java.util.List; public class MyTool { public static int bmid; public static int count=0; public static int move; // public static int quickMove; static Comparable temp; static int i=0; ///快速排序的主函数 public static void quickSort(List int quickMove; if(s quickMove=partition(a,s,e); quickSort(a,s,quickMove-1); quickSort(a,quickMove+1,e); } } ///序列的划分 使用最后固定的一项 private static int partition(List temp=a.get(e); i=s-1; ////这个地方是不断的遍历所有的列表的前面的所有的数据项发现比参照数据小的数据项 ////然后和最前面比参照项大的数据项进行交换 for(int j=s;j if(a.get(j).compareTo(temp)<0){ i=i+1; Collections.swap(a, i, j); } } // if((i+2)==e) // { // return i+1; // } Collections.swap(a, i+1, e); return i+1; } } } 测试主方法: package ch2.divide; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Vector; import javax.naming.BinaryRefAddr; import ch1.incremental.Greater; import ch1.incremental.Less; import ch1.incremental.LinearList; public class Testdd { public static void main(String[] args) { Integer a[]={5,9,1,4,5,0,9,8,2}; //Integer a[]={5,9,1}; Double b[]={5.1,9.2,1.6,4.5,5.6,6.0,9.78,8.55,7.35}; String c[]={"aa","chongqing","shandong","shanghai","beijing","Tianjin","xianggang"}; int i; ArrayList for(i=0;i A.add(a[i]); } Vector for(i=0;i C.add(new String(c[i])); } LinkedList for(i=0;i B.add(b[i]); } ///快速排序算法测试 MyTool.quickSort((List)A, 0, a.length-1); System.out.println(A); System.out.println(A.size()); /////求逆序数 // int count=MyTool.GetCount((List)A, 0, a.length-1); // System.out.println(count); // ////////二分查找法 // MyTool.MergeSort((List)A, 0, a.length-1); // System.out.println(A); // Integer v=8; // int j=0; // j=MyTool.BinerySearch((List)A, 0, a.length-1,v); // System.out.println(j); // MyTool.MergeSort((List)B, 0, b.length-1); // System.out.println(B); // MyTool.MergeSort((List)C, 0, c.length-1,new Less()); // System.out.println(C); // MyTool.MergeSort((List)A, 0, a.length-1,new Greater()); // System.out.println(A); } }



注意事项希望大家投票支持! 这是快速排序的java学习代码经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本教程系本人依照真实经历原创,未经许可,谢绝转载。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
