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...