一,排序以前的簡單介紹,算法
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; }