歸併排序 快速排序c 實現

2021-09-26 04:55:24 字數 1919 閱讀 6545

假定由小到大排。

1、思想:

分解:二分為左右兩部分;

遞迴地對兩邊歸併:對左邊歸併,對右邊歸併

合併:合併左右為乙個。

2、code:

輸入:6

60 90 50 30 20 40

輸出:20 30 40 50 60 90

#include

#include

using

namespace std;

//合併v[low...mid]和v[mid+1...high]

void

merge

(vector<

int>

&v,int low,

int mid,

int high)

else

p3++;}

while

(p1<= mid)

while

(p2<=high)

//把temp賦值到原陣列裡的對應區域 別忘記

for(

int i=

0; i<

(int

)(high-low+1)

;++i)

}void

mergesort

(vector<

int>

&v,int low,

int high)

intmain()

int len=

(int

)v.size()

;int low=

0, high=len-1;

mergesort

(v, low, high)

;for

(auto num: v)

cout

}

假定由小到大排。

輸入:6

60 90 50 30 20 40

輸出:20 30 40 50 60 90

1、思想:

每一趟排序前定乙個樞軸;

一趟排序下來,比樞軸小的在其左邊,比樞軸大的在其右邊;

遞迴快排左邊部分,遞迴快排右邊部分。

具體每一躺怎麼排?

雙指標,逆向掃瞄,正向掃瞄。

逆向掃瞄:當前數一直大於樞軸就繼續掃瞄,不大於了跳出。同時將該小數放到左邊去。

逆向掃瞄:當前數一直小於樞軸就繼續掃瞄,不小於了跳出。同時將該大數放到右邊去。

重複上述過程,直到正向逆向掃瞄相遇,終止(掃瞄完了)。

2、code:

#include

#include

using

namespace std;

intpartition

(vector<

int>

&v,int low,

int high)

//樞軸落地

v[low]

= pivot;

//or v[high]=pivot;

return low;

}void

quicksort

(vector<

int>

&v,int low,

int high)

}int

main()

int len=

(int

)v.size()

;int low=

0, high=len-1;

quicksort

(v, low, high)

;for

(auto num: v)

cout

}

快速排序 歸併排序

感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 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...