排序演算法大總結(持續更新。。。)

2021-09-29 06:14:42 字數 2441 閱讀 9334

主要思路:選擇乙個基準數字(一般是第乙個數字),設定兩個指標分別為 i和j,j從序列後面往前跳動,i從序列前面往後跳動,j遇到乙個比基準數字小的數字那麼停止,i遇到乙個比基準數字大的數字停止,如果i和j不相等,那麼將這兩個數字交換,直到i和j相等,終止迴圈,將第i個數字和選擇的基準數字交換位置,那麼操作之後i前面的數字就全都小於等於它,i後面的數字均大於等於它,那麼就找到了這個基準數字應該在的位置,快速排序的每一次都可以說是為了找到這個基準數字應該在的位置。然後遞迴排序i前面的和i後面序列就可以了。快速排序的時間複雜度並不穩定,最差的情況下為o(n^2),平均時間複雜度為o(logn)。此外還有一點需要注意,那就是指標i和j哪乙個先移動,基準值選擇在左端的時候要右邊的指標先移動,至於原因詳

#include#includeusing namespace std;

void quick_sort(int *a,int x,int y)

quick_sort(a,1,n);

for(int i=1;i<=n;i++)

return;

}void heapsort()

return;

}int main()

for(int i=1;i<=n2;i++)

l[n1+1]=inf;

r[n2+1]=inf;

int i=1;

int j=1;

for(int p=left;p<=right;p++)

else

}}void mergesort(int *a,int n,int l,int r)

}int main()

return 0;

}

#include #include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 500000 + 10;

const int inf = 0x7f7f7f7f;

int l[maxn], r[maxn], a[maxn];

ll merge(int *a, int n, int left, int mid, int right)

for (int i = 1; i <= n2; i++)

l[n1 + 1] = inf;

r[n2 + 1] = inf;

int i = 1;

int j = 1;

for (int p = left; p <= right; p++)

else

}return cnt;

}ll mergesort(int *a, int n, int l, int r)

else

return 0;

}int main()

return 0;

}

#include#include#includeusing namespace std;

const int maxn = 100000 + 10;

const int max_val = 1000000 + 10;

int n, a[maxn], b[maxn], c[max_val];

int main()

for (int i = 1; i <= max_val+3;i++)

c[i]=c[i]+c[i-1];

for (int j = n; j >= 1;j--)

for (int i = 1; i <= n; i++)

cout << b[i] << " ";

return 0;

}

#include#includeusing namespace std;

void bubble_sort(int *a,int n)

a[j + 1] = v;

}}int main()

#include #include #include using namespace std;

const int maxn = 1e6 + 10;

int n, cnt, a[maxn];

vectorg;

void insert_sort(int *a, int n, int g)

a[j + g] = v;

}}void shell_sort(int *a, int n)

for (int i = g.size() - 1; i >= 0; i--)

}int main()

cnt = 0;

shell_sort(a, n);

for (int i = 1; i <= n; i++)

return 0;

}

排序演算法總結 持續更新

1.選擇排序法 1.選擇排序 o n2 穩定 template void selectionsort t arr,int n swap arr i arr minindex 2.插入排序法 2 插入排序 o n2 穩定,近乎有序的陣列時,效率很高 1.交換法 使用swap,效率較低 template...

排序演算法總結(持續更新)

基本思想 通過對待 排序序列從前向後 從下標較小的元素開始 依次比較 相鄰元素的值,若發現逆序則交換,使值較大 的元素逐漸從前移向後部,就象水底下的氣泡一樣逐漸 向上冒。規則 實現 未優化 public static void bubblesort int arr 時間複雜度 空間複雜度 優化氣泡排...

常用排序演算法總結。 力求持續更新

歸併排序是將兩個或者兩個以上的有序序列進行合併的一種排序演算法。採用了分治的思想。一般使用遞迴。最好 最壞 平均時間複雜度都是o nlgn 由於在歸併過程中需要與原始記錄序列同樣數量的儲存空間存放歸併結果以及遞迴深度為lg2n的棧空間,因此 空間 複雜度為o n logn include inclu...