c语言归并、选择、直接插入、希尔、冒泡、快速、堆排序与顺序、二分查找排序.docx
《c语言归并、选择、直接插入、希尔、冒泡、快速、堆排序与顺序、二分查找排序.docx》由会员分享,可在线阅读,更多相关《c语言归并、选择、直接插入、希尔、冒泡、快速、堆排序与顺序、二分查找排序.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、/* Note:Your choice is C IDE */#include stdio.h#includestdlib.h#define MAX 4void SequenceSearch(int *fp,int Length);void Search(int *fp,int length);void Sort(int *fp,int length);/*=功能:选择排序输入:数组名称(也就是数组首地址)、数组中元素个数=*/void select_sort(int *x, int n) int i, j, min, t; for (i=0; in-1; i+) /*要选择的次数:0n-2共
2、n-1次*/ min = i; /*假设当前下标为i的数最小,比较后再调整*/ for (j=i+1; jn; j+)/*循环找出最小的数的下标是哪个*/ if (*(x+j) *(x+min) min = j; /*如果后面的数比前面的小,则记下它的下标*/ if (min != i) /*如果min在循环中改变了,就需要交换数据*/ t = *(x+i); *(x+i) = *(x+min); *(x+min) = t; /*=功能:直接插入排序输入:数组名称(也就是数组首地址)、数组中元素个数=*/void insert_sort(int *x, int n)int i, j, t;fo
3、r (i=1; i=0 & t0; h=k) /*循环到没有比较范围*/ for (j=0, k=0; j *(x+j+1) /*大的放在后面,小的放到前面*/ t = *(x+j); *(x+j) = *(x+j+1); *(x+j+1) = t; /*完成交换*/ k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/ /*=功能:希尔排序输入:数组名称(也就是数组首地址)、数组中元素个数=*/void shell_sort(int *x, int n)int h, j, k, t;for (h=n/2; h0; h=h/2) /*控制增量*/ for (j=h; j=0
4、 & t*(x+k); k-=h) *(x+k+h) = *(x+k); *(x+k+h) = t; /*=功能:快速排序输入:数组名称(也就是数组首地址)、数组中起止元素的下标=*/void quick_sort(int *x, int low, int high)int i, j, t;if (low high) /*要排序的元素起止下标,保证小的放在左边,大的放在右边。这里以下标为low的元素为基准点*/ i = low; j = high; t = *(x+low); /*暂存基准点的数*/ while (ij) /*循环扫描*/ while (it) /*在右边的只要比基准点大仍放在
5、右边*/ j-; /*前移一个位置*/ if (ij) *(x+i) = *(x+j); /*上面的循环退出:即出现比基准点小的数,替换基准点的数*/ i+; /*后移一个位置,并以此为基准点*/ while (ij & *(x+i)=t) /*在左边的只要小于等于基准点仍放在左边*/ i+; /*后移一个位置*/ if (ij) *(x+j) = *(x+i); /*上面的循环退出:即出现比基准点大的数,放到右边*/ j-; /*前移一个位置*/ *(x+i) = t; /*一遍扫描完后,放到适当位置*/ quick_sort(x,low,i-1); /*对基准点左边的数再执行快速排序*/
6、quick_sort(x,i+1,high); /*对基准点右边的数再执行快速排序*/*=功能:堆排序输入:数组名称(也就是数组首地址)、数组中元素个数=*/*功能:渗透建堆输入:数组名称(也就是数组首地址)、参与建堆元素的个数、从第几个元素开始*/void sift(int *x, int n, int s)int t, k, j;t = *(x+s); /*暂存开始元素*/k = s; /*开始元素下标*/j = 2*k + 1; /*右子树元素下标*/while (jn) if (jn-1 & *(x+j) *(x+j+1)/*判断是否满足堆的条件:满足就继续下一轮比较,否则调整。*/
7、j+; if (t=0; i-) sift(x,n,i); /*初始建堆*/for (k=n-1; k=1; k-) t = *(x+0); /*堆顶放到最后*/ *(x+0) = *(x+k); *(x+k) = t; sift(x,k,0); /*剩下的数再建堆*/*构造随机输出函数类*/void input(int a)int i;srand( (unsigned int)time(NULL) );for (i = 0; i 4; i+) ai = rand() % 100;printf(n);/*构造键盘输入函数类*/*void input(int *p) int i; printf(
8、请输入 %d 个数据 :n,MAX); for (i=0; iMAX; i+) scanf(%d,p+); printf(n);*/*构造输出函数类*/void output(int *p) int i; for ( i=0; iMAX; i+) printf(%d ,*p+); / 归并排序中的合并算法void Merge(int a, int start, int mid, int end) int i,k,j, temp110, temp210; int n1, n2; n1 = mid - start + 1; n2 = end - mid; / 拷贝前半部分数组 for ( i =
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 归并 选择 直接 插入 希尔 冒泡 快速 排序 顺序 二分 查找
限制150内