快速排序 模板 幾種情況

2021-10-25 09:40:10 字數 1109 閱讀 4712

void quick_sort(int q,int l , int r) 

quick_sort(q, l, j);

quick_sort(q, j + 1, r);

}

void quick_sort(int q, int l, int r)

while (q[ j] > x )

if(i  < j)

swap(q[i++], q[j--]);//這裡執行過 i++,j--後就可能 i==j 如果此時退出,相當於少執行了一輪遞迴

else //說明此時i == j  

i++;//i++就會 i > j,就可以跳出最外邊的while迴圈

}quick_sort(q, l, j), quick_sort(q, j + 1, r);

}

void quick_sort(int q, int l, int r)

}quick_sort(q, l, j);

quick_sort(q, j + 1, r);

}

void quick_sort(int q,int left, int right)

}//基準數歸位

q[left] = q[i];

q[i] = base;

quick_sort(q, left, j);

quick_sort(q, j + 1, right);

}

遞迴深度是log n,兩個指標掃瞄的總長度是n,每層的時間複雜度是o(n)這一步

這種劃分方式在平均情況下時間複雜度為 o(nlogn),空間複雜度為 o(logn)。

最壞情況為陣列已排好序或者陣列中的數都相等,此時每次劃分只會將陣列的長度減少1

遞迴 n 次,導致時間複雜度為 o(n2),空間複雜度為 o(n)。

排序 快速排序模板

以某個記錄 元素 為界 該記錄稱為支點或樞軸 將待排序列分成兩部分 一部分 所有記錄的關鍵字大於等於支點記錄的關鍵字 另一部分 所有記錄的關鍵字小於支點記錄的關鍵字 演算法描述 1 任取待排序記錄序列中的某個記錄 例如取第乙個記錄 作為基準 樞 按照該記錄的關鍵字大小,將整個記錄序列劃分為左右兩個子...

快速排序 模板

說明 經過本函式處理後,陣列itemarray中元素滿足prulefunc itemarray itemr itemarray iteml 為true,其中itemr iteml template t void quicksort itemarray,int iteml,int itemr,bool...

模板 快速排序

排序演算法可以說是從語言步入演算法的第一道坎了,其中最有代表性的莫過於快排。這裡模擬庫函式自帶sort的呼叫方式,寫起來相當自然清爽。樸素快速排序演算法的複雜度最好為o nlogn 最壞時能達到o n include include include include include include d...