归并排序 快速排序

来源:互联网 发布:三国志13英雄苍穹数据 编辑:程序博客网 时间:2024/06/05 03:19

归并排序

#include<stdlib.h>#include<stdio.h>static void merge(int arr[],int tmpArr[],int lpos,int rpos,int rend){int lend,start,num,i;lend=rpos-1;start=lpos;num=rend-lpos+1;while(lpos<=lend && rpos<=rend){if(arr[lpos]<arr[rpos])  tmpArr[start++]=arr[lpos++];else tmpArr[start++]=arr[rpos++];}while(lpos<=lend)  tmpArr[start++]=arr[lpos++];while(rpos<=rend)  tmpArr[start++]=arr[rpos++];for(i=0;i<num;i++,rend--)  arr[rend]=tmpArr[rend];}void mSort(int arr[],int tmpArr[],int left,int right){if(left<right){int center;center=(left+right)/2;mSort(arr,tmpArr,left,center);mSort(arr,tmpArr,center+1,right);merge(arr,tmpArr,left,center+1,right);}}void mergeSort(int arr[],int N){int *tmpArr;tmpArr=malloc(sizeof(int)*N);if(tmpArr==NULL){puts("arrange array fail");exit(1);}mSort(arr,tmpArr,0,N-1);free(tmpArr);}void printArray(int arr[],int N){int i;for(i=0;i<N;i++)  printf("%d\t",arr[i]);printf("\n");}int main(){int array[9]={56,78,33,22,14,156,123,64,634};mergeSort(array,9);printArray(array,9);return 0;}

快速排序

#include<stdlib.h>#include<stdio.h>#define cutoff 3void printArray(int arr[],int N){int i;for(i=0;i<N;i++)  printf("%d\t",arr[i]);printf("\n");}void insertSort(int A[],int N){int i,j;for(i=1;i<N;i++){int tmp=A[i];for(j=i;j>0 && tmp<A[j-1];j--)  A[j]=A[j-1];A[j]=tmp;}}static void swap(int *a,int *b){int tmp;tmp=*a;*a=*b;*b=tmp;}static int median(int arr[],int left,int right){int center=(left+right)/2;if(arr[left] > arr[center])  swap(&arr[left],&arr[center]);if(arr[left]>arr[right])  swap(&arr[left],&arr[right]);if(arr[center]>arr[right])  swap(&arr[center],&arr[right]); swap(&arr[center],&arr[right-1]) ;return arr[right-1];}void qSort(int arr[],int left,int right){int i,j;if(left+cutoff<=right){int pivot=median(arr,left,right);i=left;j=right-1;for(; ; ){while(pivot>arr[++i]) {}while(pivot<arr[--j]) {}if(i<j)  swap(&arr[i],&arr[j]);else break;}swap(&arr[i],&arr[right-1]);qSort(arr,left,i-1);qSort(arr,i+1,right);}else insertSort(arr+left,right-left+1);}void quickSort(int arr[],int N){qSort(arr,0,N-1);}int main(){int arr[]={89,654,23,54,15,84,96,568,14,26,487,9,4,11,99,0,65,43};quickSort(arr,18);printArray(arr,18);return 0;}


0 0
原创粉丝点击