0
点赞
收藏
分享

微信扫一扫

算法与数据结构(开篇)

基本概念:

算法(Algorithm):⼀个计算过程,解决问题的⽅法

Niklaus Wirth: “程序=数据结构+算法”

时间复杂度

时间复杂度:⽤来评估算法运⾏效率的⼀个式⼦

经验

当算法过程出现循环折半的时候, 复杂度式⼦中会出现logn.

时间复杂度是⽤来估计算法运⾏时间的⼀个式⼦(单位)

常⻅的时间复杂度(按效率排序) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)

复杂问题的时间复杂度 O(n!) O(2n) O(nn)

如何简单快速地判断算法复杂度

快速判断算法复杂度(适⽤于绝⼤多数简单情况)

确定问题规模n

循环减半过程→logn

k层关于n的循环→n^k

空间复杂度

空间复杂度:⽤来评估算法内存占⽤⼤⼩的式⼦

空间复杂度的表示⽅式与时间复杂度完全⼀样

算法使⽤了⼏个变量:O(1)

算法使⽤了⻓度为n的⼀维列表:O(n)

算法使⽤了m⾏n列的⼆维列表:O(mn)

查找

查找:在⼀些数据元素中,通过⼀定的⽅法找出与给定关键字相同的数据 元素的过程。

列表查找(线性表查找):从列表中查找指定元素

输⼊:列表、待查找元素

输出:元素下标(未找到元素时⼀般返回None或-1)


顺序查找 (Linear Search)

顺序查找:也叫线性查找,从列表第⼀个元素开始,顺序进 ⾏搜索,直到找到元素或搜索到列表最后⼀个元素为⽌。

时间复杂度:O(n)

代码

#include "stdio.h"

int FindNumber(int pInt[6], int n, int key);

//顺序查找
int main(){
    //定义一个数组
    int arr[] = {4, 5,  6, 8, 11, 1};
    //n为长度
    int n = sizeof (arr) / sizeof (arr[0]);
    int key;
    printf("Input what you want to look for:\n");
    scanf("%d", &key);
    int result = FindNumber(arr, n, key);
    if(result != 0){
        printf("found,position is %d", (result + 1));
    } else{
        printf("not found!");
    }
    return 0;
}

//逐个比较
int FindNumber(int arr[6], int n, int key){
    int i = 0;
    for(i = 0; i < n; i++){
        if(arr[i] == key){
            return i;
        }
    }
    return 0;
}

二分查找:

⼆分查找:⼜叫折半查找,从有序列表的初始候选区中间开

始,通过对待查找的值与候选区中间值的⽐较,可以使候选

区减少⼀半

算法与数据结构(开篇)_顺序查找

#include "stdio.h"
int bin_search(int arr[], int length, int key){
    int low = 0, high = length;
    while (low <= high){
        int mid = (low + high) / 2;
        if(arr[mid] == key){
            printf("found!");
            return mid;
        } else if(arr[mid] < key){
            //大了往右
            low = mid + 1;
        } else{
            //小了往左
            high = mid - 1;
        }
    }
    return -1;
}


int main(){
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
    int length = sizeof (arr) / sizeof (arr[0]);
    int key, res;
    printf("input the key_number:\n");
    scanf("%d", &key);
    res = bin_search(arr, length, key);
    if(res == -1){
        printf("not found");
    } else{
        printf(" the %d is found", key);
    }
    return 0;
}

举报

相关推荐

0 条评论