冒泡排序:如果要对n个数进行冒泡排序的话,那么肯定要进行n-1趟比较,在第一趟较中进行n-1次两两比较,在j趟比较中要进行n-j次两两比较。趟数决定了两两比较的次数。

#include<stdio.h>
main()
{
	int i,j,t,a[11];
	printf("请输入10个数:\n");
	for(i=1;i<11;i++)
		scanf("%d",&a[i]);
	for(i=1;i<10;i++)
		for(j=1;j<11-i;j++)
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
			printf("排序后的顺序是:\n");
			for(i=1;i<=10;i++)
				printf("%5d",a[i]);
			printf("\n");
}

代码编译执行的实例:

归并排序:

是将两个或者多个有序记录序列合并成一个有序序列。归并方法有很多种。一次对两个有序记录序列进行归并,称为二路归并排序,也有三路归并排序及多路归并排序。简介一下二路归并的基本方法:

(1)将n个记录看成是n个长度的为1的有序子表。

(2)将两两相邻的有序子表进行归并。

(3)重复(2)步骤,直到归并成一个长度为n的有序表。

#include<stdio.h>
void merge(int r[],int s[],int x1,int x2,int x3)
{
	int i,j,k;
	i=x1;
	j=x2+1;
	k=x1;
	while((i<=x2)&&(j<=x3))
		if(r[i]<=r[j])
		{
			s[k]=r[i];
			i++;
			k++;
		}
		else
		{
			s[k]=r[j];
			j++;
			k++;
		}
		while(i<=x2)
			s[k++]=r[i++];
		while(j<=x3)
			s[k++]=r[j++];
}
void merge_sort(int r[],int s[],int m,int n)
{
	int p;
	int t[20];
	if(m==n)
		s[m]=r[m];
	else
	{
		p=(m+n)/2;
		merge_sort(r,t,m,p);
		merge_sort(r,t,p+1,n);
		merge(t,s,m,p,n);
	}
}
void main()
{
	int a[11];
	int i;
	printf("请输入十个数:\n");
	for(i=1;i<=10;i++)
		scanf("%d",&a[i]);
	merge_sort(a,a,1,10);
	printf("排序后的顺序是:\n");
	for(i=1;i<=10;i++)
		printf("%5d",a[i]);
	printf("\n");
}

代码编译执行结果:



n进制转为十进制的代码实现思路:用字符型数组存放一个n进制数,在对数组中的每个元素进行判断,如果是0~9的数字,则这行    t=a[i]-'0';如果是字母的话,则执行  t=a[i]-'A'+10

如果都不符合的话,结束程序结束。

/*

n进制数转为二进制数*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
	long t1;
	int i,n,t,t3;
	char a[100];
	printf("请输入数字:\n");
	gets(a);
	strupr(a);
	t3=strlen(a);
	t1=0;
	printf("请输入进制n(2或8或16):\n");
	scanf("%d",&n);
	for(i=0;i<t3;i++)
	{
		if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n)
		{	printf("输入有误!!");
			exit(0);

		}
	
	if(a[i]>='0'&&a[i]<='9')
		t=a[i]-'0';
	else if(n>=11&&(a[i]>='A'&&a[i]<='A'+n-10))
		t=a[i]-'A'+10;
	t1=t1*n+t;
	}
	printf("十进制数形式是%d\n",t1);
}

程序代码编译执行的结果: