Java排序演算法(一)

來源:互聯網
上載者:User

標籤:快速排序   java排序   置換   儲存   數量級   min   選擇排序   amp   style   

Java排序演算法(一)一、排序的基本概念和分類1.1排序的定義  

  在《大話資料結構》中,排序定義為,假設含有n個記錄的序列為{r1,r2,...,rn},其相應的關鍵字{k1,k2,...,kn},需確定1,2...n的一種排列p1,p2...pn,是其相應的關鍵字滿足Kp1<=Kp2<=...<=Kpn(非遞減或非遞增)關鍵,即使得序列稱為一個按關鍵字有序的序列{rp1,rp2...rp3},這樣的操作稱為排序。

1.2排序的穩定性

  假設ki=kj(1<=i<=n,1<=j<=n,i!=j),且在排序前的序列中ri領先於rj(即i<j)。如果排序後ri仍然領先rj,則所用的排序方法是穩定的;反之, 若可能使得排序後序列中rj領先ri,則稱所用的排序方法是不穩定的。:

 

1.3內排序和外排序

內排序是在排序整個過程中,待排序的所有記錄全部被放置在記憶體中。
外排序是由於排序的記錄個數太多,不能同時放置在記憶體,整個排序過程需要內外多次交換資料才能進行
主要討論內排序,排序演算法效能主要受三方面影響
1.時間效能(儘可能少的關鍵字比較次數和儘可能少的記錄移動次數)
2.輔助空間(執行演算法所需要的其他儲存空間)
3.演算法複雜性(演算法本身的複雜度,不是演算法的時間複雜度) 

1.4七個主要的排序演算法

按照演算法的複雜性(可以簡單理解為演算法邏輯和演算法編碼量)
簡單排序演算法:冒泡排序,簡單選擇排序,直接插入排序
改進演算法:快速排序,希爾排序,歸併排序,堆排序

二、簡單排序演算法
 1 public class Sort 2 { 3     //實現從小到大排序 4     public static void main(String[] args) 5     { 6         int[] arr1 = {9,1,5,8,3,7,4,6,2}; 7         bubbleSort2(arr1); 8         //selectSort(arr1); 9         for(int i=0;i<arr1.length;i++)10         {11             System.out.println(arr1[i]);12         }13     }14     /*15     *冒泡排序,相鄰兩個元素進行比較,如果滿足條件進行位置置換16     *原理:本函數內迴圈一次,將最值提到冒泡到最尾部17     *備忘:各位大雕可以寫一個冒泡到數組頭部的,我寫冒泡到尾部代碼看起來比較好記,哈哈18     *時間複雜度:比較1+2+3+...+n=n*(n+1)/2次,並做等數量級的記錄移動O(n*n)19     */20     public static void bubbleSort1(int[] arr)21     {22     23         for(int i=0;i<arr.length-1;i++)24         {25             for(int j=0;j<arr.length-1-i;j++)26             {27                 if(arr[j]>arr[j+1])28                 {29                     int temp = arr[j];30                     arr[j] = arr[j+1];31                     arr[j+1] = temp;32                 }33             }34         }35     }36     /*37     *簡單選擇排序,以一個角標的元素和其他元素進行比較38     *原理,從n-1-i個記錄中選出關鍵字最小的記錄,並和第i個記錄交換39     *時間複雜度:O(n*n),相對而言,簡單選擇排序的效能要略優於冒泡排序40     */41     public static void selectSort(int[] arr)42     {43         for(int i=0;i<arr.length-1;i++)44         {45             int min = i;        //將當前下標定義為最小值下標46             for(int j=i+1;j<arr.length;j++)47             {48                 //j初始化為i,表示每次都是數組arr下標為i的元素和後面(i+1)的元素進行比較49                 if(arr[min]>arr[j])50                 {51                     min = j;    //如果有小於當前最小值的關鍵字,此關鍵字下標賦值給min52                 }53             }54             if(i!=min)            //如果min不等於i,說明找到最小值,交換55             {56                 int temp = arr[i];57                 arr[i] = arr[min];58                 arr[min] = temp;59             }60         }61     }62     /*63     *直接插入排序,64     *原理:將一個記錄插入到已經排好序的有序表中,從而得到一個新的。記錄數增加1的有序表65     *例子:《大話資料結構》中將其比作抽撲克牌,抽一張排序一張,好書推薦。。。66     */67     public static void insertSort(int[] arr)68     {69         for(int i=1;i<arr.length;i++)70         {71             int temp = arr[i];72             for(int j=i;j>0&&temp<arr[j-1];j--)73             {74           arr[j]=arr[j-1];75             }
76        arr[j]=temp;          
77 }78 }79 80 }

 

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.