java物件導向的冒泡排序,選擇排序和插入排序的比較

來源:互聯網
上載者:User

標籤:out   ...   long   public   blog   java物件導向   nbsp   總結   col   

這三種排序有倆個過程:

  1.比較倆個資料。                                     

  2.交換倆個資料或複製其中一項。

 

這三種排序的時間層級

  冒泡排序:比較 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2

       交換  0——N2/2 = N2/4

       總時間 3/4*N2

  選擇排序:比較 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2

       交換  0——3*(N-1)=3*(N-1)/2=3/2*N

       總時間 N2/2+3/2*N

  插入排序:第一輪最多比較一次,第二輪最多比較倆次,最後一輪比較N-1次,所以最多比較N*(N-1)/2。

       複製的次數和比較的次數大致相等,但是複製消耗的時間比交換要小.

       比較 0——N*(N-1)/2=N*(N-1)/4=N2/4

       複製 0——N*(N-1)/2=N*(N-1)/4=N2/4

       總時間 N2//2

  總結:插入排序演算法比冒泡快一倍,比選擇排序略快一點,但這些演算法都是O(N2)的時間層級。

  

這三種排序的思想  

  冒泡排序:在首輪,第一項和第二項比較,將大的放在後面,然後比較第二項和第三項,將大的放在後面,以此類推在首輪結束,最大的資料已經在最後一項了。在一輪輪的比較中,後面的已經排好的資料項目越來越多,需要排序的資料項目越來越少,直到為零。

  選擇排序:在冒泡排序上做了最佳化,減少了交換次數,在首輪選擇最小的數放在第一項,一輪之後第一項是有序的了,第二輪從第二項開始選擇最小的數放在第二項,以此類推,直到整個數組完全有序。

  插入排序:和前倆種排序不同,插入排序在排序過程中是局部有序,隨著插入項的增多,有序部分的項的位置會發生改變,而冒泡排序和選擇排序每輪確定的項數的位置是永遠不變的。在首輪,選擇第二項作為插入項,然後取出這一項放在一個變數中,和前一項比較而且小,則前一項後移到第二項的位置,然後第二項也就是插入項放在前一項的位置,第二輪選擇第三項作為插入項然後取出和前一項也就是第二項比較如果小,第二項後移到插入項,然後插入相在和第一項比較如果小,則第一項後移到第二項,插入項放在第一項,以此類推。

 

這三種排序的java程式

  1.冒泡排序

package aa;class BubbleSort{    private long[] a;    private int nElems;        public BubbleSort(int max){        a = new long[max];        nElems = 0;    }        public void insert(long value){        a[nElems] = value;        nElems ++;    }        public void display(){        for(int i = 0; i < nElems; i++)        {            System.out.println(a[i] + " ");        }        System.out.println("");    }        public void bubbleSort(){        for(int i = 0; i < nElems - 1; i++)        {            for(int j = 0; j < nElems - 1 - i; j++)            {                if(a[j] > a[j + 1])                {                    long temp = a[j];                    a[j] = a[j + 1];                    a[j + 1] = temp;                }            }        }    }}public class BubbleSortApp {    public static void main(String[] args){        BubbleSort arr = new BubbleSort(100);        arr.insert(77);        arr.insert(99);        arr.insert(44);        arr.insert(55);        arr.insert(22);        arr.insert(88);        arr.insert(11);        arr.insert(00);        arr.insert(66);        arr.insert(33);        arr.display();        arr.bubbleSort();        arr.display();    }    }

   2.選擇排序

package aa;class SelectSort{private long[] a;private int nElems;public SelectSort(int max){a = new long[max];nElems = 0;}public void insert(long value){a[nElems] = value;nElems ++;}public void display(){for(int i = 0; i < nElems; i++){System.out.println(a[i] + " ");}System.out.println("");}public void SelectionSort(){for(int i = 0; i < nElems - 1; i++){int min = i;for(int j = i + 1; j < nElems; j++){if(a[j] < a[min]){long temp = a[j];a[j] = a[min];a[min] = temp;}}}}}public class SelectSortApp {public static void main(String[] args){SelectSort arr = new SelectSort(100);arr.insert(77);arr.insert(99);arr.insert(44);arr.insert(55);arr.insert(22);arr.insert(88);arr.insert(11);arr.insert(00);arr.insert(66);arr.insert(33);arr.display();arr.SelectionSort();arr.display();}}

  3.插入排序

package aa;class InsertSort{private long[] a;private int nElems;public InsertSort(int max){a = new long[max];nElems = 0;}public void insert(long value){a[nElems] = value;nElems ++;}public void display(){for(int j = 0; j < nElems; j++){System.out.println(a[j] + " ");}System.out.println("");}public void insertionSort(){int out,in;for(out = 1; out < nElems; out++){long temp = a[out];in = out;while(in > 0 && a[in-1] >= temp){a[in] = a[in - 1];in --;}a[in] = temp;}}}public class InsertSortApp {public static void main(String[] args){int maxSize = 100;InsertSort arr = new InsertSort(maxSize);arr.insert(77);arr.insert(99);arr.insert(44);arr.insert(55);arr.insert(22);arr.insert(88);arr.insert(11);arr.insert(00);arr.insert(77);arr.insert(77);
arr.display();arr.insertionSort();arr.display();}}

  

            

java物件導向的冒泡排序,選擇排序和插入排序的比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.