這兩種排序方法都是能夠進行大量數據排序的,基本上1000萬的排序是秒出,1億數據,Shell大概要10多秒,快速排序大概在3秒左右。以前的三種排序在10萬數據的時候勉強支持,100萬就算不出了。shell
/** * Created by Administrator on 2018-02-17. */ public class Sort { static final int SIZE = 100000000; public static void shellSort(int[] a) { int i,j,h; int r,temp; int x = 0; for (r = a.length / 2;r >= 1;r /= 2) { for (i = r;i < a.length;i++) { temp = a[i]; j = i - r; while (j >= 0 && temp < a[j]) { a[j+r] = a[j]; j -= r; } a[j+r] = temp; } } x++; // System.out.print("第" + x + "步排序結果:"); // for (h = 0;h < a.length;h++) { // System.out.print(" " + a[h]); // } // System.out.print("\n"); } public static void quickSort(int[] arr,int left,int right) { int f,t; int rtemp,ltemp; ltemp = left; rtemp = right; f = arr[(left+right)/2]; while (ltemp < rtemp) { while (arr[ltemp] < f) { ++ltemp; } while (arr[rtemp] > f) { --rtemp; } if(ltemp <= rtemp) { t = arr[ltemp]; arr[ltemp] = arr[rtemp]; arr[rtemp] = t; --rtemp; ++ltemp; } } if (ltemp == rtemp) { ltemp++; } if (left < rtemp) { quickSort(arr,left,ltemp-1); } if (ltemp < right) { quickSort(arr,rtemp+1,right); } } public static void main(String[] args) { int[] shuzu = new int[SIZE]; int i; for (i = 0;i < SIZE;i++) { shuzu[i] = (int)(100000 + Math.random() * (100000 + 1)); } // System.out.print("排序前的數組爲:\n"); // for (i = 0;i < SIZE;i++) { // System.out.print(shuzu[i] + " "); // } // System.out.print("\n"); shellSort(shuzu); //快速排序此處調用quickSort(shuzu,0,SIZE-1); // System.out.print("排序後的數組爲:\n"); // for (i = 0;i < SIZE;i++) { // System.out.print(shuzu[i] + " "); // } // System.out.print("\n"); } }