算法导论,合并排序,c实现。
2015-01-10 19:03
267 查看
/*INSERTION-SORT*/ //直接插入排序 #include<stdio.h> int insertionsort(int A[],int n); int mergesort(int A[],int p,int r); int merge(int A[],int p,int q,int r); int insertionSSort(int A[],int p,int r); int main(void) { int A[10]={10,6,5,77,8,4,3000,9,12,1}; //mergesort(A,10); insertionSSort(A,0,10); //insertionsortsort(A,0,10); int i; for(i=0;i<10;i++) printf("%d\n",A[i]); return 0; } int insertionsort(int A[],int n)//升序 { int j,i; for(j=1;j<=n-1;j++) { int key=A[j]; i=j-1; while(i>=0) { if(A[i]<key) break;//降序的话把使这里的A[i]>key A[i+1]=A[i]; i=i-1; } A[i+1]=key; } } int merge(int A[],int p,int q,int r) { int n1=q-p+1; int n2=r-q; int arrC[n1]; int arrD[n2]; int i; for(i=0;i<n1;i++) arrC[i]=A[p+i]; for(i=0;i<n2;i++) arrD[i]=A[q+i+1]; //arrC[n1+1]=88888; //arrD[n2+1]=88888; i=0; int j=0; int k; for(k=p;k<=r;k++) { if(i<n1&&j<n2){ if(arrC[i]<arrD[j]) { A[k]=arrC[i]; i=i+1; //continue; } else { A[k]=arrD[j]; j=j+1; //continue; } } else if(i>=n1&&j<n2) { A[k]=arrD[j]; j=j+1; //continue; } else if(i<n1&&j>=n2) { A[k]=arrC[i]; i=i+1; //continue; } } } int mergesort(int A[],int p,int r)//此代码数组0开头 并不是书上所写的1开头 合并排序 { int q; if(p<r) { q=(p+r)/2; mergesort(A,p,q); mergesort(A,q+1,r); merge(A,p,q,r); } } int insertionSSort(int A[],int p,int r)//习题2.3-4 { if(p<r) { //--r;wrong insertionSSort(A,p,r-1); insertionsort(A,r); } }
相关文章推荐
- 算法导论--JAVA实现合并排序详解
- 《算法导论》3、合并排序实现(C++)
- 算法导论Java实现-合并排序(包含习题2.3-2)
- 算法导论Java实现-合并排序(包含习题2.3-2)
- 合并(归并)排序 算法原理与实现
- 排序算法的数组实现 -- 合并排序(三)
- 算法中分治策略实现合并排序
- 单链表的实现(包括就地逆转单链表,表排序, 合并单链表、判断表是否有环)
- W. :利用最小优先级队列实现对k个已序队列的合并排序。习题6.5-8
- 合并排序(C语言实现)
- 算法 合并排序 C++实现
- 各种算法的C#实现系列1 - 合并排序的原理及代码分析
- 合并两个排序链表--迭代和递归分别实现
- c++实现合并排序
- 算法导论——合并排序
- 算法导论学习笔记(二):合并排序
- 算法导论6.5-8堆排序-K路合并
- W. :利用合并排序和二分查找实现习题2.3-7
- 算法导论:选择排序的原理与实现
- [转载]:合并两个已排序好的int数组,并排序返回c#实现