快速排序是利用分治和遞迴的思想進行的排序演算法,每一次都將第乙個元素置於它在陣列中應該的位置(前面的數字比它小,後面的數字比它大),然後就把此數的前半段和後半段重複前面的操作。核心思想就是利用了乙個paration這個函式。
平均時間複雜度
最好時間複雜度
最壞時間複雜度
空間複雜度
nlog(n)
nlog(n)
n2log(n)
/**
* 快速排序的核心演算法
* * @param array
* @param start
* @param end
* @return
*/public static int paration(int array, int start, int
end)
array[start] = array[end];
while (array[start] <= temp && start
< end)
array[end] = array[start];
}array[start] = temp;
return start;
}
我們來簡單分析一下這個**,這段**就是找出第乙個array[start]在array陣列中的位置index,並且將所有小於array[start]的數交換到index前面去,將所有比array[start]大的數交換到index後面去,這就是快排的乙個小分支。
/**
* 快速排序
* 時間複雜度為nlog(n)
* * 最好的時間複雜度為nlog(n)
* 最壞的時間複雜度為n*n
* * @param array
*/public static void quicksort(int array, int start, int
end)
}
利用遞迴不停地分割,一直到start和end相同時,就是陣列被分成乙個乙個數的時候,這樣這個資料就變成有序的了。 複雜度nlog n 之堆排序
堆排序是利用特殊二叉樹大頂堆和小頂堆進行排序的演算法,通過將陣列轉化成大頂堆 滿足array n array 2n 1 和array n array 2n 2 這兩個條件 然後將array 0 和array array.length 1 交換,然後將無序區重新構建大頂堆。重複之前的步驟知道所有的都變...
快速排序的時間複雜度與空間複雜度
我理解的是,快速排序用的是分治法,運用的遞迴的演算法,先挑選乙個基準值,小於基準值的數放在左邊,大於基準值的數放在基準值的右邊,這樣就涇渭分明的三塊 但是這三塊是有序的,基準值左邊右邊的內 部數是無序的,所以,將基準值左右兩端繼續進行快速排序,直到區間長度為1,排序就完成了。下面使用vs2013實現...
插入排序複雜度為什麼不是nlog n
插入排序是一種很基本的排序,其複雜度為o n2 在大一學程式設計時沒有多想,為什麼不能利用二分查詢改進為o nlogn 呢 我們都知道插入排序就是在已有的序列上不斷地插入新的元素,我們都知道二分查詢的時間複雜度是o logn 二分查詢的條件就是序列必須是有序的。而剛好可以用在插入排序的過程中使用,這...