快速排序 歸併排序

2021-09-20 15:30:09 字數 1185 閱讀 7038

1、快速排序

快速排序利用分治的思想,首先選取乙個哨兵,將陣列中大於哨兵的元素放到一邊,小於陣列的元素放到另一邊,然後對兩邊也進行相同的操作。

public

void

quicksort

(list

t)private

void

quicksort

(list

t,int l,

int h)

//將大於哨兵的放到一邊,小於哨兵的放到另一邊,這裡選取[l,h]區間中第乙個元素作為哨兵

private

void

patition

(list

t,int l,

int h)

t.set

(l,vis)

;//將哨兵插在「中間」

return l;

}

3、歸併排序

歸併排序也是利用分治的思想,假如資料可分成兩部分:a和b,且a和b的內部都是有序的,那麼可以將a和b合成乙個有序的陣列,方法是先選取a和b中的第乙個元素,並將其中較小的放到陣列c中,然後後移a或b中的指標(從哪個陣列中選出較小的就下移哪乙個),然後再次比較a和b中的元素,選出較小的放到c中,如此迴圈。

例如: a: 2 5 9 ,b:1 6 7 10

第一次: c : 1

第二次: c : 1、2 (b中選出1後後移指標,用6與2比較)

第三次: c : 1、2、5

。。。歸併排序就是將陣列分為兩部分,然後將每部分又分為兩部分,最後每部分只有乙個資料時便向上開始合併。

//將[l,m]和[m+1,h]兩部分合併

private

static

void

merge

(list

t,int l,

int m,

int r)

else

if( j < len2 )}}

public

static

void

mergesort

(list

t)private

static

void

mergesort

(list

t,int l,

int r)

}

快速排序 歸併排序

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