冒泡排序:如果要对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); }
程序代码编译执行的结果: