当前位置: 代码迷 >> 综合 >> 算法 第四版 2.3.7
  详细解决方案

算法 第四版 2.3.7

热度:30   发布时间:2023-09-23 03:26:16.0

把<0的也算入大小为0的数组

通过统计可以得出,他们的大小是与N存在一定比例的关系


package Cap2_3;import Cap2_1.SortTemplate;
import edu.princeton.cs.introcs.StdOut;
import edu.princeton.cs.introcs.StdRandom;public class Quick extends SortTemplate{private static int[] cnt = new int[3];public static void sort(Comparable[] a){StdRandom.shuffle(a);sort(a, 0, a.length-1);}private static void sort(Comparable[] a, int lo, int hi){if(hi-lo<=2){cnt[hi-lo<0?0:hi-lo]++;}if(hi <= lo) return;int j=partition(a, lo, hi);sort(a, lo, j-1);sort(a, j+1, hi);}private static int partition(Comparable[] a, int lo, int hi){int i=lo, j=hi+1;Comparable v = a[lo];while(true){while(less(a[++i], v)) if(i == hi) break;while(less(v, a[--j])) if(j == lo) break;if(j>i) exch(a, i, j);else break;}exch(a, lo, j);return j;}public static void main(String[] args) {// TODO Auto-generated method stubfor(int N=10;N<=100000;N*=10){for(int i=0;i<3;i++)Quick.cnt[i]=0;Integer[] a = new Integer[N];for(int i=0;i<N;i++)a[i]=i;StdRandom.shuffle(a);sort(a);assert isSorted(a);StdOut.println("N="+N+"    \tcnt[0]="+Quick.cnt[0]+"\tcnt[1]="+Quick.cnt[1]+"\tcnt[2]="+Quick.cnt[2]);}}}



N=10    	cnt[0]=7	cnt[1]=2	cnt[2]=0
N=100    	cnt[0]=65	cnt[1]=16	cnt[2]=13
N=1000    	cnt[0]=676	cnt[1]=164	cnt[2]=99
N=10000    	cnt[0]=6650	cnt[1]=1644	cnt[2]=1002
N=100000    	cnt[0]=66636	cnt[1]=16645	cnt[2]=9938



  相关解决方案