归并排序 快速排序
来源:互联网 发布:三国志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
- 快速排序&归并排序
- 快速排序,归并排序
- 快速排序、归并排序
- 快速排序&&归并排序
- 归并排序+快速排序
- 快速排序 归并排序
- 快速排序&归并排序
- 快速排序 && 归并排序
- 归并排序 快速排序
- 快速排序&归并排序
- 快速排序 && 归并排序
- 快速排序,归并排序
- 快速排序和归并排序
- 归并排序和快速排序
- 归并排序和快速排序
- 归并排序和快速排序
- 排序之归并、快速排序
- 快速排序与归并排序
- Android 标题栏设置
- 倒水(Water)
- 成绩排名(20)
- malloc()分配的堆内存为什么比实际的大
- React与Redux学习总结(一)
- 归并排序 快速排序
- 436. Find Right Interval 要重新做!!
- zoj1906,Relatives 欧拉函数
- Visual Assist X设置
- 开发者必看|Android 8.0 新特性及开发指南
- BZOJ 1257: [CQOI2007]余数之和sum 分块计算,基础数论
- poj 2800 找规律
- 《疯狂JAVA讲义》之六——java源程序中的注释
- JAVA中用final来修饰方法的参数