athrunwang

          紀元
          數據加載中……
          java實現各種算法
          /**
           * 
           */
          package sortAlgorithm;
          import java.io.File;
          import java.io.IOException;
          import java.sql.Time;
          import java.util.Random;
          /**
           * @author sky
           * 該類給出各種排序算法
           *
           */
          public class sort{
          private static Integer[] elem(int n){
          int N=n;
          Random random=new Random();
          Integer elem[]=new Integer[N];
          for (int i=0;i<N;i++){
          elem[i]=random.nextInt(1000);
          }
          return elem;
          }
          public static void main (String Args[]) throws InterruptedException{
          int n=30000;
          Integer elem[]=elem(n);
          long start,end;
          class sort0 extends Thread{
          Integer elem[];
          int n;
          sort0(Integer elem[],int n){
          this.elem=elem;
          this.n=n;
          }
          public void run(){
          System.out.println("線程啟動");
          straightInsertSort(elem,n);
          }
          }
          elem=elem(n);
          start=System.currentTimeMillis();
          sort0 s1=new sort0(elem,n);
          elem=elem(n);
          sort0 s2=new sort0(elem,n);
          elem=elem(n);
          sort0 s3=new sort0(elem,n);
          elem=elem(n);
          sort0 s4=new sort0(elem,n);
          elem=elem(n);
          sort0 s5=new sort0(elem,n);
          s1.start();
          s2.start();
          s3.start();
          s4.start();
          s5.start();
          s2.join();
          s1.join();
          s3.join();
          s4.join();
          s5.join();
          System.out.println("多線程簡單插入排序:");
          end=System.currentTimeMillis();
          System.out.println(end-start);
          elem=elem(n);
          start=System.currentTimeMillis();
          straightInsertSort(elem,n);
          end=System.currentTimeMillis();
          System.out.println("簡單插入排序:");
          System.out.println(end-start);
          elem=elem(n);
          start=System.currentTimeMillis();
          shellSort(elem,n);
          end=System.currentTimeMillis();
          System.out.println("希爾排序:");
          System.out.println(end-start);
          elem=elem(n);
          start=System.currentTimeMillis();
          bubbleSort(elem,n);
          end=System.currentTimeMillis();
          System.out.println("冒泡排序:");
          System.out.println(end-start);
          /*
             elem=elem(n);
          start=System.currentTimeMillis();
          quickSort(elem,n);
          end=System.currentTimeMillis();
          System.out.println("快速排序:");
          System.out.println(end-start);*/
          elem=elem(n);
          start=System.currentTimeMillis();
          simpleSelectionSort(elem,n);
          end=System.currentTimeMillis();
          System.out.println("簡單選擇排序:");
          System.out.println(end-start);
          elem=elem(n);
          start=System.currentTimeMillis();
          heapSort(elem,n);
          end=System.currentTimeMillis();
          System.out.println("堆排序:");
          System.out.println(end-start);
          elem=elem(n);
          start=System.currentTimeMillis();
          mergeSort(elem,n);
          end=System.currentTimeMillis();
          System.out.println("歸并排序:");
          System.out.println(end-start);
          }
          //顯示排序結果
          public static <T extends Comparable<? super T>> void show(T[] elem,int n){
          for (int i=0;i<n;i++){
          System.out.print(elem[i]);
          System.out.print(' ');
          }
          System.out.println();
          }
          //交換元素
          private static <T extends Comparable<? super T>> void swap(T[] elem,int i,int j){
          T tmp=elem[i];
          elem[i]=elem[j];
          elem[j]=tmp;
          }
          //直接插入排序法,復雜度為O(n^2)
          public static <T extends Comparable<? super T>> void straightInsertSort (T elem[],int n){
          for (int i=1;i<n;i++){
          T e=elem[i];
          int j;
          for (j=i-1;j>=0 && e.compareTo(elem[j])<0;j--){
          elem[j+1]=elem[j];
          }
          elem[j+1]=e;
          }
          }
          //shell插入排序算法,復雜度為O(n^1.5)
          private static <T extends Comparable<? super T>> void  shellInsertHelp(T elem[],int n,int incr){
          for (int i=incr;i<n;i++){
          T e=elem[i];
          int j=i-incr;
          for (;j>=0 && e.compareTo(elem[j])<0;j=j-incr){
          elem[j+incr]=elem[j];
          }
          elem[j+incr]=e;
          }
          }
          public static <T extends Comparable<? super T>> void shellSort(T elem[],int n ){
          for (int incr=n/2;incr>0;incr=incr/2){
          shellInsertHelp(elem,n,incr);
          }
          }
          //冒泡排序算法,時間復雜度為O(n^2)
          public static <T extends Comparable<? super T>> void bubbleSort(T elem[],int n){
          for (int i=n-1;i>0;i--){
          for (int j=0;j<i;j++){
          if (elem[j].compareTo(elem[i])>0){
          swap(elem,i,j);
          }
          }
          }
          }
          //快速排序算法,時間復雜度為O(n*log(n))
          private static <T extends Comparable<? super T>> int partition(T elem[],int low,int high){
          while (low<high){
          for (;elem[high].compareTo(elem[low])>=0 && low<high;high--);
          swap(elem,high,low);
          for (;elem[high].compareTo(elem[low])>=0 && low<high;low++);
          swap(elem,high,low);
          }
          return low;
          }
          private static <T extends Comparable<? super T>> void quickSortHelp(T elem[],int low,int high){
          if (low<high){
          int pivot=partition(elem,low,high);
          quickSortHelp(elem,low,pivot-1);
          quickSortHelp(elem,pivot+1,high);
          }
          }
          public static <T extends Comparable<? super T>> void quickSort(T elem[],int n){
          quickSortHelp(elem,0,n-1);
          }
          //簡單選擇排序算法,時間復雜度為O(n^2)
          public static <T extends Comparable<? super T>> void simpleSelectionSort(T elem[],int n){
          for (int i=0;i<n-1;i++){
          int lowIdx=i;
          for (int j=i+1;j<n;j++){
          if (elem[lowIdx].compareTo(elem[j])>0)
          lowIdx=j;
          }
          swap(elem,lowIdx,i);
          }
          }
          //堆排序,時間復雜度為O(n*log(n))
          private static <T extends Comparable<? super T>> void heapAdjust(T elem[],int low,int high){
          for (int i=low,lhs=2*i+1 ;lhs<=high;lhs=2*i+1){
          if (lhs<high && elem[lhs].compareTo(elem[lhs+1])<0)lhs++;
          if (elem[i].compareTo(elem[lhs])<0){
          swap(elem,i,lhs);
          i=lhs;
          }else break;
          }
          }
          public static <T extends Comparable<? super T>> void heapSort(T elem[],int n){
          //初始化堆
          for (int i=(n-2)/2;i>=0;i--){
          heapAdjust(elem,i,n-1);
          }
          swap(elem,0,n-1);
          //排序
          for (int i=n-2;i>0;--i){
          heapAdjust(elem,0,i);
          swap(elem,0,i);
          }
          }
          //歸并排序算法,時間復雜度為O(n*log(n))
          private static <T extends Comparable<? super T>> void simpleMerge(T elem[],T tmpElem[],int low ,int mid, int high){
          int i=low,j=mid+1,k=low;
          for (;i<=mid && j<=high;k++){
          if (elem[i].compareTo(elem[j])<=0)
          tmpElem[k]=elem[i++];
          else 
          tmpElem[k]=elem[j++];
          }
          for (;i<=mid;i++){
          tmpElem[k++]=elem[i];
          }
          for (;j<=high;j++){
          tmpElem[k++]=elem[j];
          }
          for (;low<=high;low++){
          elem[low]=tmpElem[low];
          }
          }
          private static <T extends Comparable<? super T>> void mergeHelp(T elem[],T tmpElem[],int low ,int high){
          if (low < high){
          int mid=(low+high)/2;
          mergeHelp(elem,tmpElem,low,mid);
          mergeHelp(elem,tmpElem,mid+1,high);
          simpleMerge(elem,tmpElem,low,mid,high);
          }
          }
          public static <T extends Comparable<? super T>> void mergeSort(T elem[],int n){
          T[] tmpElem=(T[])new Comparable[n];
          mergeHelp(elem,tmpElem,0,n-1);
          }
          }

          posted on 2012-05-08 21:48 AthrunWang 閱讀(370) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 榆社县| 新乡市| 上犹县| 开江县| 尤溪县| 托克托县| 清涧县| 濉溪县| 嘉禾县| 麻栗坡县| 柏乡县| 繁峙县| 克什克腾旗| 岑溪市| 淮滨县| 涟源市| 张家港市| 湖北省| 苏尼特左旗| 新乐市| 罗江县| 东辽县| 玛纳斯县| 高阳县| 凤山市| 政和县| 南木林县| 岳西县| 毕节市| 南皮县| 嵊泗县| 沅江市| 余庆县| 峨山| 铁岭市| 博兴县| 辰溪县| 桃江县| 韶山市| 梁山县| 昌邑市|