快速排序
快速排序採用的是分治的策略,演算法的具體實現過程是
1.確定乙個數x(一般是選中間值x=q[l+r>>1])
2.利用指標i,j,將陣列中比x小的數放在一邊,比x大的數放在另一邊
3.分別對兩邊進行遞迴快排
4.當[l,r]中的元素個數<=1時返回。
看乙個具體的模板題:
給定你乙個長度為n的整數數列。
請你使用快速排序對這個數列按照從小到大進行排序。
並將排好序的數列按順序輸出。
輸入格式
輸入共兩行,第一行包含整數 n。
第二行包含 n 個整數(所有整數均在1~10
9'>109
109範圍內),表示整個數列。
輸出格式
輸出共一行,包含 n 個整數,表示排好序的數列。
資料範圍1≤
n≤100000
'>1≤n≤100000
1≤n≤100000
輸入樣例:
5
3 1 2 4 5
輸出樣例:1 2 3 4 5
1 #include2 #include3 #include4using
namespace
std;
5const
int n=1e5+10;6
intn,q[n];
7void quick_sort(int l,intr)8
17quick_sort(l,j);
18 quick_sort(j+1
,r);19}
20int
main()
21
歸併排序
歸併排序同樣是使用分治的策略,不同於快速排序的是歸併排序是先進行歸併,再遞迴,具體過程如下:
1.首先進行遞迴歸併
2.選定中間值mod=l+r>>1
3.設定兩個指標i=l,j=mod+1
4.將數從小到大進入新陣列tmp中
5.用新陣列更新原陣列
就拿剛才的模板題
**如下:
#include#include#include
using
namespace
std;
const
int n=1e5+10
;int
n,q[n],tmp[n];
void merge_sort(int l,int
r)int
main()
快速排序 歸併排序
感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...
快速排序,歸併排序
快速排序 quicksort 是對 氣泡排序的一種改進。設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。需要注意的是,多個相同的值的相對位置也許會在演算法結束時產...
歸併排序,快速排序
快速排序實現 filename fastsort description author hcq createtime 2019 04 12 10 01 public class fastsort arrays.stream arr foreach v system.out.println 排序後 s...