(排序大汇总.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(排序大汇总

#include stdio.h#include time.h#include math.h#include stdlib.h#include limits.h#define SIZE 100#define MAX 1000//交换数据void Swap(int *a, int *b){ int temp; temp = *a; *a = *b; *b = temp;}//冒泡排序void BubbleSort(int *arr, int size){ int i, j; for(i=0;isize-1;i++) for(j=size-1;ji;j--) if(arr[j] arr[j-1]) Swap(arr[j], arr[j-1]);}//选择排序void SelectionSort(int *arr, int size){ int i, j, min; //找出从a[i]到a[size-1]的最小元素的位置 for(i=0;isize-1;i++) { min = i; for(j=i+1;jsize;j++) if(arr[min] arr[j]) min = j; //将a[i]与a[min]的数据交换 Swap(arr[i], arr[min]); }}//插入排序void InsertSort(int *arr, int size){ int fOut, loc, temp; for(fOut=1;fOutsize;fOut++) if(arr[fOut] arr[fOut-1]) { temp = arr[fOut]; loc = fOut; do { arr[loc] = arr[loc-1]; loc--; }while(loc0 arr[loc-1]temp); arr[loc] = temp; }}//快速排序int Partition(int *arr, int first, int last){ int i, small, x; //为了减少最差情况的出现频率而作的一种优化 Swap(arr[first], arr[(first+last)/2]); x = arr[first]; small = first; for(i=first+1;i=last;i++) if(arr[i] x) { small++; Swap(arr[small], arr[i]); } Swap(arr[first], arr[small]); return small;}void RecQuick(int *arr, int first, int last){ int pivotLoc; if(first last) { pivotLoc = Partition(arr, first, last); RecQuick(arr, first, pivotLoc-1); RecQuick(arr, pivotLoc+1, last); }}void QuickSort(int *arr, int size){ RecQuick(arr, 0, size-1);}//计数排序void CountSort(int *arr, int size){ int temp[MAX] = {0}; int i, j; for(i=0;isize;i++) temp[arr[i]]++; j = 0; for(i=0;iMAX;i++) { while(0 != temp[i]) { arr[j] = i; temp[i]--; j++; } }}//归并排序void Merge(int *arr, int start, int mid, int end){ int temp1[SIZE], temp2[SIZE]; int n1, n2; int i, j, k; n1 = mid - start + 1; n2 = end - mid; //拷贝前半部分数组 for(i=0;in1;i++) temp1[i] = arr[start + i]; //拷贝后半部分数组 for(i=0;in2;i++) temp2[i] = arr[mid + i + 1]; //把后面的元素设置的很大 temp1[n1] = temp2[n2] = INT_MAX; i = j = 0; // 逐个扫描两部分数组然后放到相应的位置去 for(k=start;k=end;k++) { if(temp1[i] = temp2[j]) { arr[k] = temp1[i]; i++; } else { arr[k] = temp2[j]; j++; } }}void RecMerge(int *arr, int start, int end)

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档