整數排序(入門)
阿新 • • 發佈:2017-12-23
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這門語言,寫插入排序時感覺代碼簡單粗暴。。。
整數排序(入門)