1. 程式人生 > >整數排序(入門)

整數排序(入門)

open 數據 -- emp ase ger 之前 oid 語言

給一組整數,按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。

這道題就是考察排序算法

我上網了解了一下O(n2)的算法有以下幾種

(1)冒泡排序:顧名思義從頭開始將最大的慢慢與後一個元素作比較,像氣泡一樣慢慢浮上去

public class Solution {
    /*
     * @param A: an integer array
     * @return: 
     */
    public void sortIntegers(int[] A) {
        int n = A.length;
        for(int i = 0 ; i < n ; i++){
            for(int j = i + 1 ; j < n ; j++){
                if(A[i]>A[j]){//每次與後面的元素進行一一對比 然後符合條件就交換(交換非常耗時間)  
                    int temp = A[i];
                    A[i] = A[j];
                    A[j] = temp;
                }
            }
        }
    }
}

(2)選擇排序:將選取元素後面的元素選取最小(最大)元素進行比較交換,將小(大)的元素放在最前面

public class Solution {
    /*
     * @param A: an integer array
     * @return: 
     */
    public void sortIntegers(int[] A) {
        int n = A.length;
        for(int i = 0 ; i < n ; i++){
            int min = A[i];//將當前元素設置為最小的元素
            int k = i; //角標也設置成當前
            for(int j = i+1 ; j < n ; j++){
                if(A[j]<min){ //當符合條件就將至賦值給min並記錄角標
                    min = A[j];
                    k = j;
                }
            }
            int temp = A[k]; //在取得最小值和角標後進行交換操作(註:這裏缺少一個從別人那裏借鑒小優化:將temp與A[i]比較然後判斷不同在進行交換)
                A[k] = A[i];
                A[i] = temp;
        }
    }
}

(3)插入排序:將當前元素與之前的元素進行比較放在合適的位置上,整理撲克就是這個原理

class Solution:
    """
    @param: A: an integer array
    @return: 
    """
    def sortIntegers(self, A):
        n = len(A)
        for i in range(1,n):
            temp = A[i]#記錄當前值,因為當前只可能要跟前面的制進行交換,如果要交換,必然使前面交換的位置向後移一位使得原來的位置上的元素被覆蓋
            j = i-1#從前一位開始比較
            while j >= 0 and temp < A[j]:#當前一個位置的角標超出了0或者比當前值小(因為前面的值都是排好順序的)就停止循環查找,
                A[j+1] = A[j]#將交換位置後面的數據往後移一位
                j = j-1
            A[j+1] = temp #因為最後一次的循環 j--了 j上的元素肯定比temp小所以我們要把元素放到j後一位
 

寫到最後,我發現我越來越喜歡python這門語言,寫插入排序時感覺代碼簡單粗暴。。。

  

整數排序(入門)