c语言几种排序方法

1.将输入的一串数字存入数组中,可先用字符串的形式输入,再通过转化成整型数存入数组中

int len=0,tmp=0;
	int a[MAXSIZE]={0};
	char string[100]={0};
	printf("请输入任意个数的整数,以回车结束\n");
	gets(string);
	char *str=string;
	while(*str!='\0')
	{
		while(*str!=' '&&*str!='\0')  //'1','0',' ','1','2',' '
		{
			a[len]=a[len]*10+*str-'0';
			str++;
		}
		len++;
		while(*str==' ')
		    str++;
	}
	print(a,len);

2.几种排序方法。冒泡排序:循环进行比较,依次将最小的数冒出来。

void Bubble_sort(int a[],int len)
{
	int i,j;
	int flag=FALSE;  //FALSE代表序列依旧为乱序
	for(i=1;i<len&&flag==FALSE;i++)
	{
		flag=TRUE;
		for(j=0;j<len-i;j++)
		{
			if(a[j]>a[j+1])
			{
				swap(a,j,j+1);
				flag=FALSE;//若出现交换,说明存在乱序
			}
		}
	}
}

选择排序:先通过比较将最小的数找出来,在将剩余的数找出最小的,循环排序。

void Select_sort(int a[],int len)
{
	int i,j,min;
	for(i=1;i<len;i++)
	{
		min=i-1;
		for(j=i;j<len;j++)
		{
			if(a[min]>a[j])
				min=j;
		}
		if(min!=i-1)
			swap(a,min,i-1);
	}
}

 插入排序:每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

void Insert_sort(int a[],int len)
{
	int i,j;
	for(i=1;i<len;i++)
	{
		new=a[i];
		for(j=i-1;j>=0;j--)
		{
			if(a[j]>new)
				a[j+1]=a[j];
			else break;
		}
		a[j+1]=new;
		
		for(j=0;j<=i;j++)
		{
			while(a[j]>a[i])
			{
				swap(a,j,i);
			}
		}
		
	}
	
}

其中交换函数为:

void swap(int a[],int i,int j)
{
	int tmp;
	tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}

猜你喜欢

转载自blog.csdn.net/florence_/article/details/81085485
今日推荐