1.归并排序
void merge(int *result, int begin, int mid, int end, int *temp)
{
int k = begin;
int i = begin;
int j = mid + 1;
while (i <= mid&&j <= end){
temp[k++] = result[i] < result[j] ? result[i++] : result[j++];
}
while (i <= mid)
temp[k++] = result[i++];
while (j <= end)
temp[k++] = result[j++];
for (int t = begin; t <= end; t++)
result[t] = temp[t];
}
void mergeSort(int *result, int begin, int end, int *temp)
{
if (begin < end){
int mid = (end - begin) / 2 + begin;
mergeSort(result, begin, mid, temp);
mergeSort(result, mid + 1, end, temp);
merge(result, begin, mid, end, temp);
}
}int partition(int *result, int begin, int end)
{
int temp = result[begin];
int low = begin;
int high = end;
while (low < high){
while (low < high&&result[high] > temp)
high--;
if (low < high)
result[low++] = result[high];
while (low < high&&result[low] < temp)
low++;
if (low < high)
result[high--] = result[low];
}
result[low] = temp;
return low;
}
void quickSort(int *result, int begin, int end)
{
if (begin < end){
int k = partition(result, begin, end);
quickSort(result, begin, k - 1);
quickSort(result, k + 1, end);
}
}
void insertSort(int *a, int length)
{
for (int i = 1; i < length; i++){
int temp = a[i];
int j = i - 1;
while (j >= 0 && a[j] > temp){
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
void bubbleSort(int *a, int length)
{
for (int i = length - 1; i >= 0; i--){
for (int j = 0; j < i; j++){
if (a[j]>a[j + 1]){
//swap(a[j], a[j + 1]);
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}void shellSort(int *a, int length)
{
for (int i = length / 2; i >= 1; i = i / 2){
for (int j = i; j < length; j++){
int k = j - i;
int temp = a[j];
while (k >= 0 && a[k] > temp){
a[k + i] = a[k];
k -= i;
}
a[k + i] = temp;
}
}
}void heapAdjust(int *a, int k, int n)
{
int lhc, rhc;
int index = k;
while (k < n / 2){
lhc = 2 * k + 1;
rhc = lhc + 1;
if (lhc<n&&a[lhc]>a[index]){
index = lhc;
}
if (rhc<n&&a[rhc]>a[index]){
index = rhc;
}
if (index == k){
break;
}
else {
//swap(a[k], a[index]);
int temp = a[k];
a[k] = a[index];
a[index] = temp;
k = index;
}
}
}
void heapSort(int *a, int n)
{
for (int i = n / 2 - 1; i >= 0; i--){
heapAdjust(a, i, n);
}
for (int i = n - 1; i >= 1; i--){
//swap(a[i], a[0]);
int temp = a[i];
a[i] = a[0];
a[0] = temp;
heapAdjust(a, 0, i);
}
}int main(void)
{
srand(time(NULL));
const int size = 10000000;
//int a[9] = { 64 ,45 ,76, 28 ,74 ,38, 88 ,92, 34 };
clock_t start, end;
int *a = new int[size];
int *b = new int[size];
int *c = new int[size];
int *temp = new int[size];
for (int i = 0; i < size; i++){
c[i] = b[i] = a[i] = rand() % 2534541;
// cout << a[i] << " ";
}
//cout << endl;
start = clock();
//mergeSort(c, 0, size - 1,temp);
//priority_queue<int> que(c, c + size);
heapSort(c, size);
//bubbleSort(c, size);
//sort(c, c + size);
//stable_sort(c, c + size);
//qsort(a, size, sizeof(int), cmp);
end = clock();
cout << "heapSort:" << end - start << " ms" << endl;
start = clock();
//mergeSort(a, 0, size - 1, temp);
//insertSort(a, size);
//bubbleSort(a, size);
shellSort(a, size);
end = clock();
cout << "shellSort:" << end - start << " ms" << endl;
start = clock();
quickSort(b, 0, size - 1);
end = clock();
cout << "quickSort:" << end - start << " ms" << endl;
return 0;
}原文地址:http://blog.csdn.net/u012637838/article/details/45314657