首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

排序與查找算法大全:冒泡、直接插入、順序查找、折半查找 C 實現

     編輯:C 語言基礎

查找算法

1. 順序查找(哨兵法)

int search(int array[], int n, int k) {
    int i = n-1;
    array[0] = k;           // 設置哨兵
    while (array[i] != k) i--;
    return i;               // 返回下標,0 表示未找到
}

2. 折半查找(前提:數組有序)

int halfsearch(int array[], int n, int k) {
    int i = 1, j = n, mid;
    while (i <= j) {
        mid = (i + j) / 2;
        if (k == array[mid]) return mid;
        else if (k < array[mid]) j = mid - 1;
        else i = mid + 1;
    }
    return 0;  // 未找到
}

排序算法

1. 冒泡排序

void mpsort(int array[]) {
    int i, j, a;
    for (i = 1; i < N; i++)
        for (j = i+1; j < N; j++)
            if (array[i] > array[j]) {
                a = array[i]; array[i] = array[j]; array[j] = a;
            }
}

2. 直接插入排序

void insertsort(int array[]) {
    int i, j;
    for (i = 2; i < N; i++) {
        array[0] = array[i];  // 哨兵暫存待插元素
        j = i - 1;
        while (array[0] < array[j]) {
            array[j+1] = array[j--];
        }
        array[j+1] = array[0];
    }
}

主程序交互演示

#define N 11
void creat(int a[]) { for(i=1;i

複雜度速查

算法平均時間最壞時間空間穩定性
順序查找O(n)O(n)O(1)穩定
折半查找O(log n)O(log n)O(1)穩定
冒泡排序O(n²)O(n²)O(1)穩定
直接插入O(n²)O(n²)O(1)穩定
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved