快速排序

    xiaoxiao2022-07-06  200

    步骤 获得待排序数组a选取一个合适的数字p(一般来说就选取数组或是子数组的第一个元素)作为排序基准将待排序数组a中比基准p小的放在p的左边,比基准p大的放在p的右边 从第3步获得的两个子数组sub1跟sub2判断sub1或sub2中是否只有一个元素,如果只有一个元素则返回此元素,否则就将sub1(或是sub2)代回到第1步中继续执行 public static void main(String[] args) {                  int a[] = {6,5, 2, 4, 6, 1, 3, 11, 9, 10, 8, 7,0};         quickSort(a,0,a.length - 1);         System.out.println("最终排序结果"+Arrays.toString(a));     }          public static int partition(int arr[], int left, int right){             int i = left, j = right;             int tmp;             //定义参照值为数组的中间值     int pivot = arr[(left + right) / 2];            while (i <= j) {                 //当arr[i]小于参照值时,符合左边小的原则,不需调换位置,直接跳过,直到找到不满足条件的A[i]时终止该循环     while (arr[i] < pivot)     i++;                //当arr[j]大于参照值时,符合右边大的原则,不需调换位置,直接跳过,直到找到不满足条件的A[j]时终止该循环     while (arr[j] > pivot)     j--;                 //i小于j时,完成a[i]和a[j]的交换     if (i <= j) {     tmp = arr[i];     arr[i] = arr[j];     arr[j] = tmp;                     i++;     j--;     }         };            //返回的i就是满足i左边的值比i小.i右边的值比i大     return i;     }        public static void quickSort(int arr[], int left, int right) {             int index = partition(arr, left, right); //            System.out.println("index"+index);     if (left < index - 1){     quickSort(arr, left, index - 1); //                System.out.println(Arrays.toString(arr));     }             if (index < right){     quickSort(arr, index, right); //                System.out.println(Arrays.toString(arr));     }     }

           

    最新回复(0)