数据结构与算法分析 L1
2015-06-04 16:16
555 查看
选择排序
原理
依次从后面 选择 最小的元素放到前面。实现-C
//编译环境:Window+Code::Blocks #include<stdio.h> #include<time.h> #define random(x) (rand()%x) void SelectionSort(int T[], int n) { int i,j; int minj, minx; for(i=0; i<n-1; i++) { minj = i; minx = T[i]; for(j=i+1; j<n; j++) { if(T[j] < minx) { minj = j; minx = T[j]; } } T[minj] = T[i]; T[i] = minx; } } int main(){ int n; // Initialize scanf("%d",&n); int *T = (int*)malloc(sizeof(int)*n); int i; for(i=0 ; i<n ; i++){ T[i] = random(400000); } //Selection Sort clock_t start,finish; double TheTimes; start=clock(); int times = 5; for (i=0; i<times; i++) SelectionSort(T, n); finish=clock(); TheTimes=(double)(finish-start)/CLOCKS_PER_SEC/times; printf("Time eclipse is %.6fs\n",TheTimes); printf("\n"); return 0; }
时间复杂度
n2n^2归并排序
原理
分治法,不断的将数列一分为二,直到子数列中只有一个元素。实现-C
#include<stdio.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x) void Merge(int array[], int l, int mid, int r, int temp[]) { int i, j, k; k = 0; i = l; j = mid + 1; while( i <= mid && j <= r ) { if ( array[i] <= array[j] ){ temp[k++] = array[i++]; } else { temp[k++] = array[j++]; } } while (i <= mid) { temp[k++] = array[i++]; } while (j <= r) { temp[k++] = array[j++]; } for (i = l; i<=r; i++) { array[i] = temp[i-l]; } } void MergeSort_r(int array[],int l,int r,int temp[]) { if (l<r) { int mid = (l+r)/2; MergeSort_r(array,l,mid,temp); MergeSort_r(array,mid+1,r,temp); Merge(array,l,mid,r,temp); } } int MergeSort(int array[],int l,int r) { if(r < l) { return -1; } if(r == l) { return 0; } int len = r - l + 1; int *temp = malloc(sizeof(int) * len); if(temp == NULL) { return -2; } MergeSort_r(array, l, r, temp); free(temp); return 0; } int main(){ int n; // Initialize scanf("%d",&n); int *T = (int*)malloc(sizeof(int)*n); int i; for(i=0 ; i<n ; i++){ T[i]= random(400000); } //Merge Sort clock_t start,finish; double TheTimes; start=clock(); int times = 1000; for (i=0; i<times; i++) MergeSort(T, 0, n-1); finish=clock(); TheTimes=(double)(finish-start)/CLOCKS_PER_SEC/times; printf("Time eclipse is %.6fs\n",TheTimes); printf("\n"); return 0; }
时间复杂度分析
Best: nlg(n)nlg(n)堆排序(没看懂)
时间复杂度
nlg(n)nlg(n)相关文章推荐
- 数据结构与算法分析-索引
- 5. C#数据结构与算法 -- 非线性结构(树,二叉树,二叉查找树)
- 数据结构与算法分析-数学知识复习
- 数据结构与算法分析-排序
- 4. C#数据结构与算法 -- 集合结构
- (C语言-数据结构与算法)还原二叉树
- 3. C#数据结构与算法 -- 线性结构(线性表,栈,队列,循环队列)
- 数据结构题目
- python-数据结构
- <数据结构学习与实验指导>3-1一元多项式求导/3-2汉诺塔的非递归实现
- java数据结构题之约瑟夫问题
- STL 的一些数据结构比较
- <数据结构学习与实验指导>2-12两个有序链表序列的交集/2-13两个有序序列的中位数
- <数据结构学习与实验指导>2-10海盗分赃/2-11两个有序链表序列的合并
- <数据结构学习与实验指导>2-8用扑克牌计算24点/2-9装箱问题模拟
- 数据结构之区间K大数
- 数据结构之链式队列的所有操作
- 数据结构与算法(2、从Reverse到大O表示法)
- 数据结构与算法(1、数组和链表)
- 数据结构之---C语言实现广义表头尾链表存储表示