快速排序&&歸併排序
#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 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。需要注意的是,多個相同的值的相對位置也許會在演算法結束時產...