斐波拉契数列

  1. int a[10] = {1,1};
  2. for (int i = 2; i < 10; i++) {
  3. a[i] = a[i-1]+a[i-2];
  4. }
  5. // [1,1,2,3,5,8,13,21,34,55]
  6. for (int i = 0; i < 10; i++) {
  7. printf("%d\n",a[i]);
  8. }

冒泡排序法

  1. int a[10] = {5,4,2,6,7,1,8,3,9,10};
  2. int count = sizeof(a) / sizeof(int);
  3. for (int i = 0; i < count; i++) {
  4. for (int j = 0; j < count-i; j++) {
  5. if (a[j] > a[j+1]) {
  6. int temp = a[j];
  7. a[j] = a[j+1];
  8. a[j+1] = temp;
  9. }
  10. }
  11. }
  12. for (int i = 0; i < 10; i++) {
  13. printf("%d\n",a[i]);
  14. }

选择排序法

  1. int a[10] = {5,4,2,6,7,1,8,3,9,10};
  2. int count = sizeof(a) / sizeof(int);
  3. for (int i = 0; i < count; i++) {
  4. for (int j = i; j < count; j++) {
  5. if (a[j] > a[i]) {
  6. int temp = a[j];
  7. a[j] = a[i];
  8. a[i] = temp;
  9. }
  10. }
  11. }
  12. for (int i = 0; i < 10; i++) {
  13. printf("%d\n",a[i]);
  14. }

二分法查找

  1. int a[10] = {1,2,3,4,5,6,7,8,9,10};
  2. int start = 0,end = 10,mid;
  3. int dest = 8;
  4. while (start <= end) {
  5. mid = (start + end ) /2;
  6. if (dest == a[mid]) {
  7. printf("%d %d\n",mid,a[mid]);
  8. break;
  9. }else if (dest > a[mid]) {
  10. start = mid+1;
  11. } else if (dest < a[mid]){
  12. end = mid-1;
  13. }
  14. }

递归

int fab(int num);
int main(){

    int mm = fab(6);
    printf("%d\n",mm);
}

int fab(int num)
{
    if (num == 1) {
        return 1;
    } else {
        return num * fab(num - 1);
    }
}

汉诺塔