1、 RecordNode *record;SortObject;struct Node;typedef struct Node ListNode;struct Node ListNode *next;typedef ListNode * LinkList; /*对链表按递增序进行表插入排序,链表中第一个结点为表头结点*/void listSort(LinkList * plist) ListNode *now, *pre, *p, *q, *head; head=*plist; pre=head-next; if(pre=NULL) return; now=pre- if(now=NULL) r
2、eturn; while( now!=NULL) q=head; p=head- while(p!=now & p-keykey) q=p;p=p- if(p=now) pre=pre-now=pre- continue; pre-next=now- q-next=now; now-next=p; /*Shell排序*/void shellSort(SortObject * pvector, int d) int i, j, increment; RecordNode temp; for (increment = d; increment 0; increment /= 2) for(i=in
3、crement; in; i+) temp=pvector-recordi; j=i-increment; while(j=0 & temp.keyrecordj+increment=pvector-recordj; j-=increment; recordj+increment=temp; /*直接选择排序*/void selectSort(SortObject * pvector) int i, j, k; for( i = 0; i n-1; i+ ) k=i; for(j=i+1; jrecordj.keyrecord k;record k=temp; /*冒泡排序*/void bub
4、bleSort(SortObject * pvector) int i, j, noswap; for(i=0; noswap=TRUE; for(j=0;n-i-1; j+) recordj+1.keyrecordj+1;recordj+1=temp; noswap=FALSE; if(noswap) break; /*快速排序*/void quickSort(SortObject * pvector, int l, int r) int i, j; if(l=r) return; i=l; j=r; while(i!=j) while( (pvector-recordj.key=temp.
5、key) & (ji) ) j-; if(irecordi+= pvector-record j;recordi.keyrecordi=temp; quickSort(pvector,l,i-1); quickSort(pvector,i+1,r); /*二組歸併算法算法*/void merge(RecordNode* r, RecordNode *r1, int low, int m, int high) int i,j,k; i=low; j=m+1; k=low; while( (i=m) & (j=high) ) if(ri.key=rj.key) r1k+=ri+; else r1k
6、+=rj+; while (i=m) r1k+=ri+; while (j=high) r1k+=rj+; /*对r做一趟归并,结果放在r1中*/void mergePass(RecordNode *r, RecordNode *r1, int n, int length) int j, i=0; while(i+2*length-1n) merge(r,r1,i,i+length-1,i+2*length-1); i+=2*length; if(i+length-1n-1) merge(r,r1,i,i+length-1,n-1); else for(j=i; j+) r1j=rj; /*二
7、路歸並排序法*/void mergeSort(SortObject *pvector) RecordNode recordN; int length =1; while(lengthrecord,record,pvector-n,length); length*=2; mergePass(record,pvector-record,pvector-void s1() /*Shell排序*/ int i; SortObject *p3=(SortObject *)malloc(sizeof(SortObject); p3-n=10;record=(RecordNode *)malloc(size
8、of( RecordNode)*p3-n);ii+)recordi.key=ai; shellSort(p3, 4); printf(Shell排 序 后 : );%d ,p3-recordi.key);nvoid s2() /*直接选择排序*/ SortObject *p4=(SortObject *)malloc(sizeof(SortObject); p4-record=(RecordNode *)malloc(sizeof(RecordNode)*p4-p4- selectSort(p4);直接选择排序后 :,p4-void s3() /*冒泡排序*/ SortObject *p5=(
9、SortObject *)malloc(sizeof(SortObject); p5-record=(RecordNode *)malloc(sizeof(RecordNode)*p5-p5- bubbleSort(p5);起 泡 排 序 后 :,p5-void s4() /*快速排序 */ SortObject *p6=(SortObject *)malloc(sizeof(SortObject); p6-record=(RecordNode *)malloc(sizeof(RecordNode)*p6-p6- quickSort(p6,0,p6-n-1);快 速 排 序 后 :,p6-vo
10、id s5() /*二路归并排序*/ SortObject *p7=(SortObject *)malloc(sizeof(SortObject); p7-record=(RecordNode *)malloc(sizeof(RecordNode)*p7-p7- mergeSort(p7);二路归并排序后 :,p7-void main() int i,b; 實驗六:各種排序算法的比較 n 根據已知得出排序前的結果是:10;,ai);nn各類排序算法以及算法的選擇如下: 1Shell排序法 n 2直接選擇排序法 n 3冒泡排序法 n 4快速排序法 n 5二路歸並排序法 n 0結束 nnn 請選擇一種方法并輸出: scanf(%d,&b); while(1) switch(b) case 1: s1(); break; case 2: s2(); break; case 3: s3(); case 4: s4(); case 5: s5(); case 0: exit(0); n 請再接著選擇一個并輸出(0结束):实验结果截图:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1