排序算法(三) 快速排序

来源:互联网 发布:网络靶场如何构建 编辑:程序博客网 时间:2024/05/21 10:43
package study;public class SortNumberTest {           public static void main(String[] args) {        Test1();    }    public static void Test1(){      System.out.println("快速排序");    int[] numbers3={72,6,57,72,60,42,83,73,48,85};    //int[] numbers3={72,72,72};    print(numbers3);    quickSort(numbers3,0, numbers3.length - 1);    System.out.println("...................................");        }    //快速排序    public static void quickSort(int[] numbers, int start, int end) {       System.out.println("again:"+"start="+start+",end="+end);        if (start < end) {               int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)               int i = start, j = end;               do {                   while ((numbers[i] > base) && (i < end))                       i++;                   while ((numbers[j] < base) && (j > start))                       j--;                   if (i <= j) {   //这里应该含等号。                                //1.中间有一个值为基准值,i,j相等,应再各自前进一步,基准值不用再参加排序(但不这么做不会造成程序错误,只是效率降低)                                //2.如果基准值为最大值,不含等号会造成i不能前进一步,造成死循环(造成死循环)                    swap(numbers,i,j);                  print(numbers);                    i++;                       j--;                   }               } while (i <= j);   //也应含等号,与上面的1同理,中间有一个值为基准值,i,j相等,应再各自前进一步,基准值不用再参加排序(但不这么做不会造成程序错误,只是效率降低)            if (start < j)                   quickSort(numbers, start, j);               if (end > i)                   quickSort(numbers, i, end);           }       }              private static void swap(int[] numbers, int a, int b) {    int t = numbers[a];    numbers[a] = numbers[b];    numbers[b] = t;    }      private static void  print(int[] numbers){    for (int i = 0; i < numbers.length; i++) {           System.out.print(numbers[i]+" ");        }        System.out.println();    }    }


0 0
原创粉丝点击