数据结构--排序
2012-08-06 23:33
162 查看
#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 ) { b[i-first]=a[m]; m++; } else { b[i-first]=a ; 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); }
相关文章推荐
- 数据结构 排序和查找
- 数据结构 三种简单的排序(插入、选择、冒泡)
- java数据结构排序之冒泡排序
- 数据结构-数组排序(冒泡 选择 插入 归并(合并有序数组))-C语言
- 数据结构-数组排序-二路归并-循环实现-C语言
- [算法与数据结构] - No.4 选择排序
- [MOOC笔记]排序专题(数据结构)
- 并归排序 c语言数据结构
- 算法和数据结构---排序---堆排序
- Python开发【数据结构】:排序练习
- 数据结构排序-冒泡排序
- 大顶堆排序C实现--【严蔚敏数据结构实现】
- 数据结构 26 排序 归并 快排使用精简栈深度优化
- 数据结构-排序
- 数据结构中的内部排序
- 数据结构 之 外排序
- C语言_数据结构和算法之_排序和查找
- 数据结构学习笔记-排序2
- 数据结构记录--排序
- 数据结构复习笔记:使用PHP实现内排序之冒泡排序和简单选择排序