歸併排序以及快速排序模板

2021-10-23 03:47:32 字數 1786 閱讀 8803

void merge(vector& arr, int l, int mid, int r) 

while(p1 <= mid)

while(p2 <= r)

for (int i = 0; i < size; i++)

}

歸併排序 一定要注意+號的優先順序大於》

class solution 

void merge(vector& arr, int l, int mid, int r)

while(p1 <= mid)

while(p2 <= r)

for (int i = 0; i < size; i++)

}};

這裡提供兩個模板,乙個是指定的數partition,另外乙個是末尾元素partition

/*

@p : 代表的是以哪個數字作為parition

舉例子: [6 1 5 3 4 3 7 2] p = 3

最後的less代表的是指定的數的左邊界

最後的more代表的是指定的數的右邊界

返回值是等於區域的index

*/ pairpartition(vector& arr, int l,int r,int p)

else if (arr[l] > p)

else

}

return ;

}

/*

這個partition以尾元素來

*/ pairpartition(vector& arr, int l, int r)

else if (arr[l] > arr[r])

else

}swap(arr[more], arr[r]);

return ;

}

/*

這個partition以尾元素來作為劃分值

*/ pairpartition(vector& arr, int l, int r)

else if (arr[l] > arr[r])

else

}swap(arr[more], arr[r]);

return ;

}int randominrange(int min = 1 , int max = 0)

void quicksort(vector& arr)

quicksort(arr, 0, arr.size() - 1);

}void quicksort(vector& arr, int start, int end)

}

快排的複雜度分析:  

尋找左邊第乙個大於pivot的數,尋找右邊第乙個小於pivot的數,然後交換

void partition(vector& arr,int start,int end) 

while (left <= right && arr[right] > pivot)

if (left <= right)

}}

題目:  顏色分類:

class solution else if(arr[l] > p)else}}

void sortcolors(vector& nums)

};

模板 快速排序 歸併排序

不得不說,手寫的快排真的好菜。即使開了隨機數.快速排序 include include include include using namespace std inline intread const int maxn 100010 namespace inx void quicksort int ...

排序 快速排序 歸併排序模板 模板

正經人誰手寫這玩意?785.快速排序 本質 分治。是不穩定的排序演算法。時間複雜度 o n logn o nlogn o nlog n 空間複雜度 o l ogn o logn o logn 基於遞迴,用到棧空間 模板注意點 關於無限遞迴問題,大家動手模擬一遍樣例就能理解了。快排邊界問題很多,很煩 ...

快速排序以及歸併排序

複習演算法設計與分析這本書,看到了分治這一章講到的歸併排序和快速排序,因此就給總結一下,平時直接用stl庫裡面的sort,但是自己寫還是有些吃力的,所以就嘗試了自己寫一下,給總結一下。時間複雜度為o n log n include using namespace std void merge int...