《Linux C编程一站式学习》读书笔记(2)
来源:互联网 发布:pmp十五矩阵 编辑:程序博客网 时间:2024/06/07 11:11
归并排序采用的是分而治之的策略,时间复杂度为nlg(n)。其一般步骤如下:
(1)Divide:把长度为n的输入序列分成两个长度为n/2的子序列。
(2)Conquer:对这两个序列分别采用归并排序。
(3)Merge:将两个子序列合并成一个序列。
实现如下:
#include "stdio.h"#include "stdlib.h"#define LEN 8int a[LEN] = {100,4,88,32,90,10,1,2};void merge(int start,int mid,int end){ int i,j,k; int n1 = mid -start + 1; int n2 = end -mid; int temp1[n1]; int temp2[n2]; for(i = 0;i < n1;i++) temp1[i] = a[start + i]; for(j = 0;j < n2;j++) temp2[j] = a[mid+1+j]; for(i = 0,j = 0;i < n1 && j < n2;) { if(temp1[i] > temp2[j]) { a[start+i+j] = temp1[i]; i++; } else { a[start+i+j] = temp2[j]; j++; } } while(i < n1) { a[start+i+j] = temp1[i]; i++; } while(j < n2) { a[start+i+j] = temp2[j]; j++; }}void sort(int start,int end){ int mid = (start + end)/2; if(end > start) { sort(start,mid); sort(mid+1,end); merge(start,mid,end); }}int main(void){ int i; sort(0,LEN -1); for(i = 0; i < LEN ;i++) printf("%d ",a[i]);}
快速排序是另一种采取分而治之的排序算法,平均时间复杂度也是nlg(n),但其时间常数要比归并排序小。其具体实现如下:
#include "stdio.h"void quick_sort(int start,int end,int * num){ int index; if(start < end) { int head = start; int tail = end; index = start; while(head != tail) { while(num[tail] < num[index]) tail--; swap(&num[index],&num[tail]); index = tail; while(num[head] > num[index]) head++; swap(&num[index],&num[tail]); index = head; } quick_sort(start,index-1,num); quick_sort(index+1,end,num); }}void swap(int * a,int * b){ int temp = *a; *a = *b; *b = temp;}int main(void){ int i; int a[8] = {1,4,3,2,7,6,5,8}; quick_sort(0,7,a); for(i = 0;i < 8;i++) printf("%d ",a[i]); printf("\n");}
0 0
- 《Linux C编程一站式学习》读书笔记(2)
- 《Linux C编程一站式学习》 读书笔记(1)
- 《Linux C编程一站式学习》读书笔记(1)
- 《Linux C编程一站式学习》读书笔记(3)
- 《Linux C编程一站式学习》读书笔记(4)
- Linux C编程一站式学习读书笔记——socket编程
- 《linux c编程一站式学习》笔记2
- linux C 编程 一站式学习(一)
- linux C 编程 一站式学习(二)
- Linux C编程一站式学习
- Linux C编程一站式学习
- Linux C编程一站式学习
- Linux C编程一站式学习
- Linux C编程一站式学习
- Linux C编程一站式学习
- Linux C 编程一站式学习
- Linux C编程一站式学习
- Linux C编程一站式学习
- 数字信号处理中各种频率关系
- Android4.4支持使用DevTools对原生Android应用程序WebViews内容进行调试
- android坐标
- 学习FPGA的网站推荐
- 常见算法在实际项目中的应用
- 《Linux C编程一站式学习》读书笔记(2)
- .csproj文件的配置 IIS可以调试
- 工作所需,开发了一款 “二进制文件合并工具 V1.0” 共享给大家
- 关于event.cancelBubble和event.stopPropagation()的困惑
- 程序员技术练级攻略(转自酷壳 陈皓)
- eclipse(优化三) eclipse开启后,关闭"Updating indexs"
- 配置ssh公钥访问oschina
- mysql 选项文件 启动文件
- Eclipse中的ADT更新问题记录