JAVA数据结构之递归

  1. /* 
  2. 折半查找(二分查找)的递归和非递归算法 
  3. */  
  4. public class BinarySearch<T extends Comparable<T>>  
  5. {  
  6.     private T[] data;  
  7.     public BinarySearch(T[] data)  
  8.     {  
  9.         this.data = data;  
  10.     }  
  11.     public int search(T key)  
  12.     {  
  13.         int low;  
  14.         int high;  
  15.         int mid;  
  16.         if(data == null)  
  17.             return -1;  
  18.         low = 0;  
  19.         high = data.length - 1;  
  20.         while(low <= high)  
  21.         {  
  22.             mid = (low + high) / 2;  
  23.             System.out.println("mid " + mid + "mid value:" + data[mid]);  
  24.             if(key.compareTo(data[mid]) < 0)  
  25.             {  
  26.                 high = mid - 1;  
  27.             }  
  28.             else if(key.compareTo(data[mid]) > 0)  
  29.             {  
  30.                 low = mid + 1;  
  31.             }  
  32.             else if(key.compareTo(data[mid]) == 0)  
  33.             {  
  34.                 return mid;  
  35.             }  
  36.         }  
  37.         return -1;  
  38.     }  
  39.     private int doSearchRecursively(int low,int high,T key)  
  40.     {  
  41.         int mid;  
  42.         int result;  
  43.         if(low <= high)  
  44.         {  
  45.             mid = (low + high) / 2;  
  46.             result = key.compareTo(data[mid]);  
  47.             System.out.println("mid " + mid + " mid value:" + data[mid]);  
  48.             if(result < 0)  
  49.             {  
  50.                 return doSearchRecursively(low,mid - 1,key);  
  51.             }  
  52.             else if(result > 0)  
  53.             {  
  54.                 return doSearchRecursively(mid+1,high,key);  
  55.             }else if(result == 0)  
  56.             {  
  57.                 return mid;  
  58.             }  
  59.         }  
  60.         return -1;  
  61.     }  
  62.     public int searchRecursively(T key)  
  63.     {  
  64.         if(data == nullreturn -1;  
  65.         return doSearchRecursively(0,data.length - 1,key);  
  66.     }  
  67.     public static void main(String[] args)  
  68.     {  
  69.         Integer []data = {1,4,5,8,15,33,48,77,96};  
  70.         //BinarySearch<Integer> binSearch = new BinarySearch<Integer>(data);  
  71.         //System.out.println("Key index:" + binSearch.searchRecursively(3));  
  72.         //System.out.println("Key index:" + binSearch.search(33));  
  73.         //String []dataStr = {"A","C","F","J","L","N","T"};  
  74.         //BinarySearch<String> binSearch = new BinarySearch<String>(dataStr);  
  75.         //System.out.println("Key index:"+binSearch.search("F"));  
  76.     }  
  77. }  
 

 

 

view plain
  1. public class Test1  
  2. {  
  3.     public static void main(String []args)  
  4.     {  
  5.         int t[] = {1,2,4,3};  
  6.         range(t,0);  
  7.     }  
  8.     public static void range(int []a,int start)  
  9.     {  
  10.         if(start == a.length)  
  11.         {  
  12.             for(int i =0;i<a.length;i++)  
  13.             {  
  14.                 System.out.print(a[i]);  
  15.             }  
  16.             System.out.println();  
  17.             return;  
  18.         }  
  19.         for(int i = start;i<a.length;i++)  
  20.         {  
  21.             int temp = a[start];  
  22.             a[start] = a[i];  
  23.             a[i] = temp;  
  24.             range(a,start+1);  
  25.             a[i] = a[start];  
  26.             a[start] = temp;  
  27.         }  
  28.     }  
  29. }  
 

 

 

view plain
  1. public class Test2  
  2. {  
  3.     public static void main(String args[])  
  4.     {  
  5.         int t[] = {1,2,4,3};  
  6.         range(t,0);  
  7.     }  
  8.     public static void range(int[] a,int start)  
  9.     {  
  10.         if(start == a.length)  
  11.         {  
  12.             for(int i=0;i<a.length;i++)  
  13.             {  
  14.                 System.out.print(a[i]);  
  15.             }  
  16.             System.out.println();  
  17.             return;  
  18.         }  
  19.         int dest[] = new int[a.length];  
  20.         System.arraycopy(a,0,dest,0,a.length);  
  21.         for(int i = start;i<a.length;i++)  
  22.         {  
  23.             int temp = dest[start];  
  24.             dest[start] = dest[i];  
  25.             dest[i] = temp;  
  26.             range(dest,start + 1);  
  27.         }  
  28.     }  
  29. }  
 

 

 

view plain
  1. public class Test3  
  2. {  
  3.     public static void main(String args[])  
  4.     {  
  5.         int t[] = {1,2,3,4};  
  6.         range(t,0);  
  7.     }  
  8.     public static void range(int[] a,int start)  
  9.     {  
  10.         if(start == a.length)  
  11.         {  
  12.             for(int i=0;i<a.length;i++)  
  13.             {  
  14.                 System.out.print(a[i]);  
  15.             }  
  16.             System.out.println();  
  17.             return;  
  18.         }  
  19.         for(int i = start;i<a.length;i++)  
  20.         {  
  21.             int dest[] = new int[a.length];  
  22.             System.arraycopy(a,0,dest,0,a.length);  
  23.             int temp = dest[start];  
  24.             dest[start] = dest[i];  
  25.             dest[i] = temp;  
  26.             range(dest,start + 1);  
  27.         }  
  28.     }  
  29. }  
 

 

 

view plain
  1. public class ArraySh  
  2. {  
  3.     int []theArray;  
  4.     int nElems;  
  5.     int count = 0;  
  6.     ArraySh(int max)  
  7.     {  
  8.         theArray = new int[max];  
  9.         nElems = max;  
  10.     }  
  11.     public static void main(String[] args)  
  12.     {  
  13.         int maxSize = 16;  
  14.         ArraySh arr;  
  15.         arr = new ArraySh(maxSize);  
  16.         for(int j=0;j<maxSize;j++)  
  17.         {  
  18.             int n = (int)(java.lang.Math.random() * 99);  
  19.             arr.insert(n);  
  20.         }  
  21.         arr.display();  
  22.         arr.quickSort();  
  23.         arr.display();  
  24.     }  
  25.     public void insert(int i)  
  26.     {  
  27.         theArray[count++] = i;  
  28.     }  
  29.     public void display()  
  30.     {  
  31.         for(int i : theArray)  
  32.         {  
  33.             System.out.print(i+" ");  
  34.         }  
  35.         System.out.println();  
  36.     }  
  37.     public void quickSort()  
  38.     {  
  39.         recQuickSort(0,nElems - 1);  
  40.     }  
  41.     public void recQuickSort(int left,int right)  
  42.     {  
  43.         if(right - left <= 0)  
  44.             return;  
  45.         else  
  46.         {  
  47.             long pivot = theArray[right];  
  48.             int partition = partitionIt(left,right,pivot);  
  49.             recQuickSort(left,partition-1);  
  50.             recQuickSort(partition+1,right);  
  51.         }  
  52.     }  
  53.     public int partitionIt(int left,int right,long pivot)  
  54.     {  
  55.         int leftPtr = left - 1;  
  56.         int rightPtr = right;  
  57.         while(true)  
  58.         {  
  59.             while(theArray[++leftPtr] < pivot);  
  60.             while(rightPtr > 0 && theArray[--rightPtr] > pivot);  
  61.             if(leftPtr >= rightPtr)break;  
  62.             else  
  63.                 swap(leftPtr,rightPtr);  
  64.         }  
  65.         swap(leftPtr,right);  
  66.         return leftPtr;  
  67.     }  
  68.     public void swap(int dex1,int dex2)  
  69.     {  
  70.         int temp = theArray[dex1];  
  71.         theArray[dex1] = theArray[dex2];  
  72.         theArray[dex2] = temp;  
  73.     }  
  74. }  
 

 

 

 

view plain
  1. //package sort;  
  2. import java.util.Date;  
  3. import java.util.Random;  
  4. /* 
  5.  * 插入排序 
  6.  */  
  7. public class InsertSort  
  8. {  
  9.     public static void main(String args[])  
  10.     {  
  11.         int len = 20;  
  12.         Date date = new Date();  
  13.         Random random = new Random(date.getSeconds());  
  14.         int data[]=new int[len];  
  15.         for(int i = 0; i < len; i++)  
  16.         {  
  17.             data[i]=(int)(random.nextFloat()*100+1);  
  18.         }  
  19.         show(data);  
  20.         insertSort(data,data.length);  
  21.         show(data);  
  22.         System.out.println(binarySearch(data,1,data.length,55));  
  23.         System.out.println(binarySearch2(data,55));  
  24.         insertSortDesc(data);  
  25.         show(data);  
  26.         System.out.println(binarySearch(data,1,data.length,55));  
  27.         System.out.println(binarySearch2(data,55));  
  28.     }  
  29.     /* 
  30.      * 插入排序核心 
  31.      */  
  32.     private static  void insertSortDesc(int[] data)  
  33.     {  
  34.         int length = data.length;  
  35.         for(int i = 1; i < length; i++)  
  36.         {  
  37.             int temp = data[i];  
  38.             int j = i-1;  
  39.             while(j >= 0 && data[j] < temp)  
  40.             {  
  41.                 data[j+1] = data[j];  
  42.                 j--;  
  43.             }  
  44.             data[j+1] = temp;  
  45.         }  
  46.     }  
  47.     private static  void insertSortAsc(int[] data)  
  48.     {  
  49.         int length = data.length;  
  50.         for(int i = 1; i < length; i++)  
  51.         {  
  52.             int temp = data[i];  
  53.             int j = i-1;  
  54.             while(j >= 0 && data[j] > temp)  
  55.             {  
  56.                 data[j+1] = data[j];  
  57.                 j--;  
  58.             }  
  59.             data[j+1] = temp;  
  60.         }  
  61.     }  
  62.     private static void show(int[] data)  
  63.     {  
  64.         System.out.println("========================");  
  65.         for(int i = 0; i < data.length; i++)  
  66.         {  
  67.             System.out.print(data[i] + "    ");  
  68.         }  
  69.         System.out.println();  
  70.         System.out.println("========================");  
  71.     }  
  72.     /* 
  73.      * 使用递归实现的插入排序算法 
  74.      */  
  75.     private static void insertSort(int[] data,int n)  
  76.     {  
  77.         if(n>1)  
  78.         {  
  79.             insertSort(data,n-1);  
  80.             merge(data,n-1,n);  
  81.         }  
  82.     }  
  83.     private static void merge(int[] data,int end,int n)  
  84.     {  
  85.         int temp=data[n-1];  
  86.         int i;  
  87.         for( i=end-1; i>=0; i--)  
  88.         {  
  89.             if(data[i]>temp)  
  90.                 data[i+1]=data[i];  
  91.             else  
  92.                 break;  
  93.         }  
  94.         data[i+1]=temp;  
  95.     }  
  96.     /* 
  97.      * 递归版的二分查找算法,只能是按照升序排列的数组 
  98.      */  
  99.     private static int binarySearch(int[] data,int start,int end,int value)  
  100.     {  
  101.         if(end>=start)  
  102.         {  
  103.             int pos=(start+end)/2;  
  104.             if(value==data[pos-1])  
  105.                 return pos;  
  106.             else if(value>data[pos-1])  
  107.                 return binarySearch(data,pos+1,end,value);  
  108.             else  
  109.                 return binarySearch(data,start,pos-1,value);  
  110.         }  
  111.         return -1;  
  112.     }  
  113.   
  114.     /* 
  115.      * 迭代版二分查找算法,只能查找按照升序排列的数组 
  116.      */  
  117.     private static int binarySearch2(int[] data,int value)  
  118.     {  
  119.         int start = 0 ;  
  120.         int end = data.length-1;  
  121.         int mid;  
  122.         while(end>=start)  
  123.         {  
  124.             mid=(end+start)/2;  
  125.             if(value>data[mid])  
  126.                 start=mid+1;  
  127.             else if(value<data[mid])  
  128.                 end=mid-1;  
  129.             else  
  130.                 return mid+1;  
  131.         }  
  132.         return -1;  
  133.     }  
  134. }  

你可能感兴趣的:(java,数据结构,算法,String,Integer,PIVOT)