C语言排序(冒泡,选择,插入,归并,快速)
2014-03-17 00:00
656 查看
摘要: C语言排序(冒泡,选择,插入,归并,快速)
*
/* * author:wxg */ #include<stdio.h> #include<stdlib.h> #include<string.h> /* * 冒泡排序 */ void bubbleSort(int a[],int n){ int i,j,tmp; for(i=0;i<n-1;i++){ for(j=0;j<n-i-1;j++){ //错误 for(j=0;j<n-i;j++) if(a[j]>a[j+1]){ tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } } } /* * 直接插入排序 */ void insertSort(int a[],int n){ int i,j; for(i=1;i<n;i++){ int tmp = a[i]; for(j=i;j>0;j--){ //错误 for(j=i;j<0;j--) if(tmp<a[j-1]) a[j]=a[j-1]; else break; } a[j]=tmp; } } /* * 快速排序 */ int partion(int a[],int low,int high){ int key=a[low]; while(low<high){ while((low<high)&&(key<a[high])) high--; a[low]=a[high]; // 错误 a[low++]=a[high--]; while((low<high)&&(key>a[low])) low++; a[high]=a[low]; //错误 a[high--]=a[low++]; } a[low]=key; return low; } void QSort(int a[],int low,int high){ if(low<high){ int pivotloc = partion(a,low,high); QSort(a,low,pivotloc-1); QSort(a,pivotloc+1,high); } } /* * 选择排序 */ void selectSort(int a[],int n){ int i,j,tmp,loc; for(i=0;i<n-1;i++){ tmp = a[0];loc=0; for(j=0;j<n-i;j++){ if(tmp<a[j]){ tmp=a[j];loc=j; } } a[loc]=a[j-1]; // 发生错误 a[loc]=a[j];a[j]=tmp a[j-1]=tmp; } } /* * 二分归并排序 */ void mergeArray(int *a,int s,int m,int t){ int i,j,k; int *b=(int *)malloc((t-s+1)*sizeof(int)); for(i=s,j=m+1,k=0;(i<=m)&&(j<=t);k++){ if(a[i]<a[j]){ b[k]=a[i];i++; } else{ b[k]=a[j];j++; } } for(;i<=m;i++)b[k++]=a[i]; for(;j<=t;j++)b[k++]=a[j]; for(i=s,k=0;i<=t;i++,k++){ //错误 for(i=s;i<=t;i++) a[i]=b[i] a[i]=b[k]; } free(b); } void mergeSort(int a[],int s,int t){ int m; if(s<t){ m=(s+t)/2; mergeSort(a,s,m); mergeSort(a,m+1,t); mergeArray(a,s,m,t); } for(int i=s;i<=t;i++){ printf("%d ",a[i]); } printf("\n"); } int main(){ int a[]={4,2,66,5,90,43,6,7}; int n=sizeof(a)/sizeof(a[0]); // insertSort(a,n); // bubbleSort(a,n); // QSort(a,0,n-1); // selectSort(a,n); mergeSort(a,0,n-1); for(int i=0;i<n;i++){ printf("%d ",a[i]); } printf("\n"); return 0; }
*
相关文章推荐
- 数据结构 27 排序 排序-选择 插入 冒泡 希尔 快速归并 6种排序
- 插入,归并,快速,冒泡,shell,选择排序 用c实现
- 数据结构(C#)--冒泡、插入、快速、堆、归并、希尔、选择各种排序排序过程比较以及各种排序的所用时间的对比
- java实现七大排序(插入,冒泡,选择,快速,堆,希尔,归并)
- 数据结构-数组排序(冒泡 选择 插入 归并(合并有序数组))-C语言
- 六种排序方法的学习(直接插入、希尔、冒泡、快速、选择、归并)
- 排序——冒泡、归并、快速、选择、插入、堆
- 插入 | 希尔 | 冒泡 | 快速 | 选择 | 归并排序
- 从零开始_学_数据结构(六)——排序(冒泡、插入、希尔、简单选择、归并、快速)
- C语言常用排序——直接插入,冒泡,选择,希尔,快速,堆排序
- c++实现数据结构中的各种排序方法:直接插入、选择,归并、冒泡、快速、堆排序、shell排序
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 排序算法Java描述:选择、冒泡、插入、希尔、归并、快速及三向切分快速排序
- c语言排序实例(选择、冒泡、插入、折半、快速)
- c语言归并、选择、直接插入、冒泡、快速、堆排序与顺序、二分查找
- 链表之排序(插入、选择、归并、快速、冒泡)
- C语言排序实例(选择、冒泡、插入、折半、快速)
- (数据结构排序的实验四)快速,冒泡,简单选择,直接插入排序的c语言实现!!
- C 各种排序(选择/冒泡/快速/插入/希尔/归并/堆)
- C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)