快速排序,歸併排序,改進後的排序

2021-10-04 10:44:29 字數 3071 閱讀 8427

快速排序&&歸併排序

#include

#include

using

namespace std;

//快速排序

intsplit

(int a,

int low,

int high)

else}}

else

}else

}for

(int j = low +

1; j <= high; j++)}

} temp = a[i]

; a[i]

= a[low]

; a[low]

= temp;

return i;

}//快速排序演算法時間

void

quicksort

(int a,

int low,

int high)

}//歸併排序

void

merge

(int a,

int first,

int mid,

int end,

int c)

//歸併排序時間

void

mergesort

(int a,

int low,

int high,

int c)

}int

main()

start =

clock()

;mergesort

(merge_array,

0, random * j -

1, c)

; end =

clock()

;delete

merge_array;

start1 =

clock()

;quicksort

(quick_array,

0, random * j -1)

; end1 =

clock()

;delete

quick_array;

delete

c;cout << random * j <<

"\t\t"

<<

static_cast

<

double

>

(end - start)

/ clocks_per_sec *

1000

<<

"ms\t\t"

; cout <<

static_cast

<

double

>

(end1 - start1)

/ clocks_per_sec *

1000

<<

"ms"

<< endl;

j++;}

return0;

}

改進後的歸併排序演算法

#include

#include

#include

using

namespace std;

//插入排序

template

<

typename t>

void

__merge

(t arr,

int l,

int mid,

int r)

while

(i <= mid)

arr1[k++

]= arr[i++];

while

(j <= r)

arr1[k++

]= arr[j++];

for(

int m =

0; m < r - l +

1; m++

)delete

arr1;

}//插入排序

template

<

typename t>

void

insertionsort

(t arr,

int l,

int r)

arr[j]

= temp;}}

template

<

typename t>

void

__mergesort

(t arr,

int l,

int r)

int mid = l +

(r - l)/2

;__mergesort

(arr, l, mid)

;__mergesort

(arr, mid +

1, r);if

(arr[mid]

> arr[mid +1]

)__merge

(arr, l, mid, r);}

template

<

typename t>

void

mergesort

(t arr,

int n)

intmain()

start =

clock()

;mergesort

(merge_array,random * j -1)

; end =

clock()

;delete

merge_array;

delete

c;cout << random * j <<

"\t\t"

<<

static_cast

<

double

>

(end - start)

/ clocks_per_sec *

1000

<<

"ms\t\t"

return0;

}

[**] [演算法設計與分析] 歸併排序與快速排序平均時間之比較 (c++)

([**] 歸併排序及改進

(

歸併排序 改進歸併

歸併排序的主要思想是 分治 divide and conquer 策略,首先是分,先把問題拆分成規模很小的問題 然後是治,將子問題的答案合併成乙個更大的小問題的答案,直到合併成問題本身的答案。分解的過程就是一顆二叉樹,既然是二叉樹,遞迴深度也就知道了是log 2 再來看合併的過程,分別會有兩個指標指...

快速排序 歸併排序

感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...

快速排序,歸併排序

快速排序 quicksort 是對 氣泡排序的一種改進。設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。需要注意的是,多個相同的值的相對位置也許會在演算法結束時產...