数据结构--排序

来源:互联网 发布:化工行业发展现状知乎 编辑:程序博客网 时间:2024/05/22 00:34
#include "stdafx.h"#define uint8 unsigned char void swap(uint8 *a,uint8 *b){uint8 temp;temp=*a;*a=*b;*b=temp;}void printf_array(uint8 *a,uint8 n){uint8 i;for(i=0;i<n;i++) { printf( "%d  ",a[i]);} printf("\n");}//直接插入排序void simple_insert_sort(uint8 *a,uint8 len){uint8 i,j,k,temp;for(i=1;i<len-1;i++){temp=a[i];for(j=0;j<i;j++){if(temp<=a[j])         {for(k=i;k>=j+1;k--)      //记录后移a[k]=a[k-1];a[j]=temp;              //插入较小的记录break;}}}}//起泡排序void buble_sort(uint8 *a,uint8 len){uint8 i,j,temp;for(i=len-1;i>=1;i--)  {for(j=0;j<=i-1;j++)         {if(a[j]>a[j+1])swap(&a[j],&a[j+1]);}}}//快速排序uint8 partition(uint8 *a,uint8 low,uint8 high){uint8 key;key=a[low];while(low<high){while(low<high&&a[high]>=key)high--;a[low]=a[high];while(low<high&&a[low]<=key)low++;a[high]=a[low];}a[low]=key;return low;}void fast_sort(uint8 *a,uint8 low,uint8 high){uint8 mid;if(low<high){mid=partition(a,low,high);fast_sort(a,low,mid);fast_sort(a,mid+1,high);}}//简单选择排序uint8 get_min(uint8 *a,uint8 first,uint8 last)  //从first 和last直接找到最小值{uint8 min,i;min=first;for(i=first+1;i<=last;i++){if(a[min]>a[i])min=i;}return min;}void select_sort(uint8 *a,uint8 len){uint8 min,i;for(i=0;i<=len-2;i++){min=get_min(a,i,len-1);      //获得i~len-1之间的最小值if(min!=i)swap(&a[i],&a[min]);     //交换两个元素}}//堆排序uint8 get_max_heap(uint8 *a,uint8 index,uint8 len){uint8 max,left,right;max=index;left=max*2;right=max*2+1;if(left<len&&a[left]>a[max])max=left;if(right<len&&a[right]>a[max])max=right;return max;}void heap_adjust(uint8 *a,uint8 index,uint8 len){uint8 i,max;for(i=index;i<len;){max=get_max_heap(a,i,len);if(max==i)return;else{swap(&a[max],&a[i]);i=max;}}}void heap_sort(uint8 *a,uint8 len){int i;for(i=(len-1)/2;i>=0;i--)heap_adjust(a,i,len);       //将0~len-1调整成大堆for(i=len-1;i>0;i--){swap(&a[i],&a[0]);heap_adjust(a,0,i);       //将0~i-1调整成大堆}}//归并排序void merge(uint8 *a,uint8 first,uint8 mid,uint8 last){uint8 i,j,m,n;uint8 b[20];m=first;n=mid+1;for(i=first;i<=last;i++){if(m>mid) //第一段复制完毕{for(j=n;j<=last;j++){b[i-first]=a[j];i++;}}if(n>last)  //第二段复制完毕{for(j=m;j<=mid;j++){b[i-first]=a[j];i++;}}if(a[m]<=a[n]){b[i-first]=a[m];m++;}else{b[i-first]=a[n];n++;}}for(i=first;i<=last;i++)a[i]=b[i-first];}void merge_sort(uint8 *a,uint8 first,uint8 last){uint8 mid;if(first<last){mid=(first+last)/2;merge_sort(a,first,mid);merge_sort(a,mid+1,last);merge(a,first,mid,last);}}void main() { int location,i,len;unsigned char mydata[20]={64,12,55,40,27,36,73,49,81,98};len=10;printf_array(mydata,len);merge_sort(mydata,0,len-1);printf_array(mydata,len);while(1);} 


原创粉丝点击