鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 手机系统开发 > J2ME > >

数据结构--排序

来源:互联网 作者:佚名 时间:2015-09-25 05:44
#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;in;i++) { printf( %d ,a[i]);} printf(\n);}//直接插入 排序 void simple_insert_so
#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);
} 


网友评论
<