一,排序以前的简单介绍,算法
1. 输入两个数,按代数值由小到大的顺序输出这两个数。数组
#include <stdio.h> #include <stdlib.h> int main() { float a, b, t; scanf("%f %f", &a, &b); if(a > b) { t = a; a = b; b = t; } printf("%5.2f, %5.2f\n", a, b); }
输入:5.444 1.222spa
输出:1.22 5.44指针
解析:设置一个中间变量来交换两个数的值。code
2. 输入3个数a,b,c;要求按由小到大的顺序输出。排序
#include <stdio.h> #include <stdlib.h> int main() { float a, b, c, t; scanf("%f %f %f", &a, &b, &c); /* 实现 a 和 b 的交换*/ if(a > b) { t = a; a = b; b = t; } /* 实现 a 和 c 的交换*/ if(a > c) { t = b; b = c; c = t; } if(b > c) { t = b; b = c; c = t; } printf("%5.2f, %5.2f, %5.2f\n", a, b, c); }
解析:3个数要交换3次,那么10个数两两交换要多少次,显然这种方法不合适了,input
这就是算法的重要性了,接下来讲说冒泡排序。io
2、冒泡排序class
算法要求:用起泡法对10个整数按升序排序。变量
算法分析:若是有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前日后,通过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。
1. 用数组实现
#include <stdio.h> #include <stdlib.h> #define N 10 int main() { int arr[N] = {0}; int i=0, j=0,tmp=0; printf("Please input 10 numbers:\n"); for(i=0;i<N;i++) { scanf("%d", &arr[i]); } for(j=0; j < N-1; j++) { for(i=0; i < N-1-j;i++) { if(arr[i] > arr[i+1]) { tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp; } } } printf("the sorted numbers:\n"); for(i=0;i<N;i++) { printf("%d ",arr[i]); } printf("\n"); return 0; }
2. 用指针实现
#include <stdio.h> #include <stdlib.h> #define N 10 int main() { int arr[N] = {0}; int i=0, j=0; int *p=NULL, *tmp=NULL; p = arr; printf("Please input 10 numbers:\n"); for(i=0;i<N;i++) { scanf("%d", p+i); } for(j=0; j < N-1; j++) { for(i=0; i < N-1-j;i++) { if(*(p+i) > *(p+i+1)) { tmp = *(p+i); *(p+i) = *(p+i+1); *(p+i+1) = tmp; } } } printf("the sorted numbers:\n"); for(i=0;i<N;i++) { printf("%d ",*p++); } printf("\n"); return 0; }