冒泡,選擇,插入,快速排序在Java中的實現


     近幾天再重新看數據結構的書時,根據各種排序的空間復雜度,發現快速排序所用時間是最短的,也即是說快速排序的速度最快。因此想驗證一下具體這幾個排序發的快慢,所以在Java中得以實現,同時在運行時,發現雖然快速排序的速度很快,但是它所消耗的內存是最大的。這也說明了當我們追求速度時,也必須要付出其他方面的代價。以下是幾種方法的具體實現,及其所消耗的時間。

首先在Java中隨機生成20個1000以內的數,然后使用四種排序法分別進行排序,驗證四種排序程序的無誤,以下是具體結果:

通過以上結果證明四種排序方法均可以達到排序目的,以下是對四種排序法時間的測試,觀看各個測試時間的長短,具體結果如下所示:

以上是對隨機生成的10萬個數進行排序時所需時間,從上顯然可看出冒泡所需時間為27秒,選擇排序為8秒,而插入排序為5秒,冒泡排序時間為0秒。所以冒泡是最慢的而選擇居其次,快速排序是最快的。以下是具體代碼:

  1 /**
  2  * 作者:曹家銘
  3  * 日期:2016,4,7
  4  * 功能:演示冒泡,選擇,插入,快速排序的時間快慢程度比較
  5  */
  6 package com.Paixu;
  7 
  8 import java.util.Calendar;
  9 
 10 public class Paixu {
 11 
 12     public static void main(String[] args) {
 13         // TODO Auto-generated method stub
 14 
 15         int N=100000;
 16         int arr[]=new int[N];
 17         for(int i=0;i<N;i++)
 18         {
 19             int m=(int)(Math.random()*1000);
 20             arr[i]=m;
 21         }
 22         Bubble bubble=new Bubble();
 23         Select select=new Select();
 24         Insert insert=new Insert();
 25         Quick quick=new Quick();
 26         Calendar calendar=Calendar.getInstance();//打印當前系統時間
 27         //冒泡排序所用時間
 28         System.out.println("冒泡排序前的時間為:"+calendar.getTime());
 29         bubble.sort(arr);
 30         calendar=Calendar.getInstance();
 31         System.out.println("冒泡排序后的時間為:"+calendar.getTime());//打印排序后的時間*/
 32         //選擇排序所用時間
 33         System.out.println("選擇排序前的時間為:"+calendar.getTime());
 34         select.sort(arr);
 35         calendar=Calendar.getInstance();
 36         System.out.println("選擇排序后的時間為:"+calendar.getTime());//打印排序后的時間*/
 37         //插入排序所用時間
 38         System.out.println("插入排序前的時間為:"+calendar.getTime());
 39         insert.sort(arr);
 40         calendar=Calendar.getInstance();
 41         System.out.println("插入排序后的時間為:"+calendar.getTime());//打印排序后的時間*/
 42         //快速排序所用時間
 43         System.out.println("快速排序前的時間為:"+calendar.getTime());
 44         quick.sort(0, arr.length-1, arr);
 45         calendar=Calendar.getInstance();
 46         System.out.println("快速排序后的時間為:"+calendar.getTime());//打印排序后的時間
 47         //冒泡排序后的結果
 48         bubble.sort(arr);
 49         System.out.println("冒泡排序之后的數組順序為:");
 50         for(int i=0;i<arr.length;i++)
 51         {
 52             System.out.print(arr[i]+" ");
 53         }
 54         System.out.println();
 55         //選擇排序后的結果
 56         select.sort(arr);
 57         System.out.println("選擇排序之后的數組順序為:");
 58         for(int i=0;i<arr.length;i++)
 59         {
 60             System.out.print(arr[i]+" ");
 61         }
 62         System.out.println();
 63         //插入排序的結果
 64         insert.sort(arr);
 65         System.out.println("插入排序之后的數組順序為:");
 66         for(int i=0;i<arr.length;i++)
 67         {
 68             System.out.print(arr[i]+" ");
 69         }
 70         System.out.println();
 71         //快速排序的結果
 72         quick.sort(0, arr.length-1, arr);
 73         System.out.println("快速排序之后的數組順序為:");
 74         for(int i=0;i<arr.length;i++)
 75         {
 76             System.out.print(arr[i]+" ");
 77         }
 78     }
 79 
 80 }
 81 //快速排序
 82 class Quick{
 83     public void sort(int fist,int last,int arry[]){
 84         int f=fist;
 85         int l=last;
 86         int mid=arry[(fist+last)/2];
 87         int temp=0;
 88         while(f<l){
 89             while(arry[f]<mid) f++;
 90             while(arry[l]>mid) l--;
 91             if(f>=l) break;
 92             temp=arry[f];
 93             arry[f]=arry[l];
 94             arry[l]=temp;
 95             if(arry[f]==mid) --l;
 96             if(arry[l]==mid) ++f;
 97             }
 98         if(f==l){
 99             f++;
100             l--;
101         }
102         //利用遞歸快速排序
103         if(fist<l) sort(fist,l,arry);
104         if(last>f) sort(f,last,arry);
105     }
106 }
107 //插入排序
108 class Insert{
109     public void sort(int arry[]){
110         for(int i=1;i<arry.length;i++)
111         {
112             int InsertNum=arry[i];
113             int Index=i-1;
114             while(Index>=0&&InsertNum<arry[Index])
115             {
116                 arry[Index+1]=arry[Index];//將前一個數復制給后一個比他小的數
117                 Index--;
118             }
119             arry[Index+1]=InsertNum;//將該插入的數復制給前一個較小的數
120         }
121     }
122 }
123 //冒泡排序
124 class Bubble{
125     public void sort(int arry[]){
126         int temp=0;
127         for(int i=0;i<arry.length-1;i++)
128         {
129             for(int j=0;j<arry.length-i-1;j++)
130             {
131                 if(arry[j]>arry[j+1])
132                 {
133                     temp=arry[j];
134                     arry[j]=arry[j+1];
135                     arry[j+1]=temp;
136                 }
137             }
138         }
139     } 
140 }
141 //選擇排序
142 class Select{
143     public void sort(int arry[]){
144         int temp=0;
145         for(int i=0;i<arry.length-1;i++)
146         {
147             int min=arry[i];
148             int minIndex=i;
149             for(int j=i+1;j<arry.length-1;j++)
150             {
151                 if(min>arry[j])
152                 {
153                     min=arry[j];
154                     minIndex=j;
155                 }
156             }
157             temp=arry[i];
158             arry[i]=arry[minIndex];
159             arry[minIndex]=temp;
160         }
161     }
162 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM