TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。- public class QuickSoft {
-
- private void swap(int a[],int i,int j)
- {
- int tmp=a[i];
- a[i]=a[j];
- a[j]=tmp;
- }
-
- private int partition(int a[],int p,int r)
- {
- int point = a[r];
- //将小于等于point的元素移到左边区域
- //将大于point的元素移到右边区域
- int index=p;
- for (int i = index; i < r; ++ i) {
- if (a[i]-point <= 0) {
- swap(a, index++, i);
- }
- }
- swap(a,index,r);
- return index;
- }
-
- public void qsort(int a[],int p,int r)
- {
- if(p< r)
- {
- //确定拆分点,并对数组元素进行移动
- //这是快速排序算法的关键步骤
- int q=partition(a,p,r);
- //对左半段排序
- qsort(a,p,q-1);
- //对右半段排序
- qsort(a,q+1,r);
- }
- }
-
- public static void main(String[] args) {
- //声明一个类
- QuickSoft ms=new QuickSoft();
- int len=10;
- int a[]=new int[len];
- //初始化a数组
-
- System.out.println("原始数组如下:");
- for(int i=0;i< a.length;i++)
- {
- //产生a.length个随机数
- a[i] = (int)(Math.random()*100000);
- System.out.println(a[i]);
- }
- System.out.println("---------------------");
- System.out.println("第一次分组后");
- ms.partition(a,0,len-1);
- for(int i=0;i< a.length;i++)
- {
- System.out.println(a[i]);
- }
- System.out.println("---------------------");
- //快速排序
- ms.qsort(a, 0, len-1);
-
-
-
- System.out.println("排序后的数组如下:");
- for(int i=0;i< a.length;i++)
- {
- System.out.println(a[i]);
- }
-
-
- }
- }
- 运行:
- C:work>java QuickSoft
- 原始数组如下:
- 32054
- 89211
- 55927
- 97591
- 45554
- 75152
- 44392
- 94214
- 4932
- 68341
- ---------------------
- 第一次分组后
- 32054
- 55927
- 45554
- 44392
- 4932
- 68341
- 97591
- 94214
- 89211
- 75152
- ---------------------
- 排序后的数组如下:
- 4932
- 32054
- 44392
- 45554
- 55927
- 68341
- 75152
- 89211
- 94214
- 97591
复制代码
源码下载:http://file.javaxxz.com/2014/11/30/000701000.zip |
|