对N个随机数的插入排序和合并排序
2015-05-16 19:32
274 查看
#include <iostream> #include <time.h> #include <math.h> #include <climits> // INT_MAX using namespace std; const int LENGTH = 10000; void print_array(int A[LENGTH]); void insertion_sort(int A[LENGTH]); void permutate(int A[LENGTH]); void merge(int A[], int p, int q, int r); void merge_sort(int A[], int p, int r); int main() { int A[LENGTH]; permutate(A); print_array(A); int TimeBegin = clock(); // insertion_sort(A); //插入排序 merge_sort(A, 1, LENGTH); // 合并排序 int TimeEnd = clock(); print_array(A); cout << "Time cost: " << TimeEnd - TimeBegin << "ms" << endl; getchar(); return 0; } void print_array(int A[LENGTH]) { int i; for(i = 0; i < LENGTH; i++) { cout << A[i] << " "; } cout << endl; } // 插入排序 void insertion_sort(int A[LENGTH]) { int i, j, key; for(j = 1; j < LENGTH; j++) { key = A[j]; i = j - 1; while((!(i < 0)) && A[i] > key) { A[i+1] = A[i]; i--; A[i+1] = key; } } } // 生成1-LENGTH随机数组 void permutate(int A[LENGTH]) { int j, k; srand((unsigned)time(NULL)); for(j = 0; j < LENGTH; j++) { A[j] = 1 + rand()%(LENGTH); for(k = 0; k < j; k++) { if(A[j] == A[k]) { j--; break; } } } } // 合并排序 void merge(int A[], int p, int q, int r) { int n1, n2; int i, j, k; n1 = q - p + 1; n2 = r - q; int *L = new int[n1+1]; int *R = new int[n2+1]; for(i = 0; i < n1; i++) L[i] = A[p + i - 1]; for(j = 0; j < n2; j++) R[j] = A[q + j]; L[n1] = INT_MAX; R[n2] = INT_MAX; i = 0; j = 0; for(k = p-1; k < r; k++) { if(L[i] <= R[j]) { A[k] = L[i]; i++; } else { A[k] = R[j]; j++; } } delete[] L; delete[] R; } void merge_sort(int A[], int p, int r) { double qDbl; int q; if(p < r) { qDbl = floor((double)(p+r)/2); q = (int)qDbl; merge_sort(A, p, q); merge_sort(A, q+1, r); merge(A, p, q, r); } }
相关文章推荐
- Go语言排序算法之插入排序与生成随机数详解
- 算法导论&nbsp;插入排序和合并排序
- 合并排序中对小数组采用插入排序
- 插入排序和合并排序
- 快排(尾递归的优化+随机数的优化+插入排序的优化)
- 扑克牌类比插入排序和合并排序
- 在归并排序(合并排序)中的小数组使用插入排序
- C++计算运行时间和随机数的插入排序
- java进阶- 经典排序(插入排序、冒泡排序、快排(分划交换排序)、直接选择排序、堆排序、合并排序)
- [摘记]数值方法06——随机数
- shell脚本生成随机数方法
- JavaScript 产生指定范围随机数
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- C小加 之 随机数
- Ajax请求URL后加随机数原理
- 【算法】产生多个随机数
- 随机数的产生
- 随机数生成
- PHP取得随机数或随机字符串
- JavaScript 获取随机数