快排和歸併
1.思想:都使用了分治的思路。歸併是先區域性有序再組合起來,快排是先大體有序(前半部分小於某個數,後半部分大於某個數)在區域性排好。
2.時間複雜度:歸併是嚴格的nlogn;快排平均時間複雜度nlogn(因為標桿的數不一定是在最中間),最壞有可能退化到n^2。
3.空間複雜度:歸併需要額外乙個空間用來合併,快排可以原地排序。
4.穩定性:快排不穩定,歸併可以穩定。
歸併排序:
class solution
void mergesort(vector&a,int start,int end,vector&tmp) else
}while (left<=(start+end)/2) tmp[index++]=a[left++];
while (right<=end) tmp[index++]=a[right++];
for (int i=start;i<=end;i++)
a[i]=tmp[i];
}};
快排:
class solution
void quicksort(vector&a,int start,int end)
if (left<=right)
}//這時right已經在left左邊了
quicksort(a,start,right);
quicksort(a,left,end);
}};
143. 排顏色 ii
如果沒有原地排序的要求,可以使用計數排序。原地的話類似快排,只不過pivot不是隨機找的而是根據顏色區間定的。由於pivot也是由colorto和colorfrom定的,所以要注意往兩邊排序的條件,左邊是小於等於,右邊是大於。
class solution
void sort(vector&colors,int start,int end,
int colorsfrom, int colorsto)
}sort(colors,start,j,colorsfrom,mid);
sort(colors,i,end,mid+1,colorsto);
}};
演算法 排序演算法的比較
預設為遞增順序 注 一下例子希望自己再次複習時,可以用筆在紙上畫畫記憶體圖。包括有 選擇排序 1 選擇排序 1 選擇排序的思想是,每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序1 private static void selec...
排序演算法的比較
排序方法 平均時間 最壞情況 輔助空間 簡單排序 o n 2 o n 2 o 1 快速排序 o nlogn o n 2 o logn 堆排序 o nlogn o nlogn o 1 歸併排序 o nlogn o nlogn o n 基數排序 o d n rd o d n rd o rd 1 從平均效...
排序演算法比較
本章中已經研究並仔細分析了多個內部排序方法。對於這些內部排序方法之間的比較,主要從以下幾個方面綜合考慮 時間複雜度 空間複雜度 演算法穩定性 演算法簡單性 待排序記錄數 n的大小 記錄本身的資訊量等。選擇n 個整數組成一些隨機排序,各種內部排序方法的實際時間如圖 7 10 所示。從時間複雜度看,所有...