常用的数据结构算法

时间:2021-01-02 10:23:56

1.冒泡排序
思想:将大的(小的)数冒上去,然后依次进行下去。
如:6 8 2 7 4
第一遍:62748
第二遍:26478
第三遍:24678
第四遍:24678
代码:

int arr[6]={8,2,3,4,9,7};
    for(int i=0;i<5;i++){
            for(int j=0;j<5;i++){
                if(a[i]>a[i+1]){
                    int tem=a[i];
                    a[i]=a[i+1];
                    a[i+1]=tem;
                }
            }
}

2.选择排序
首先将第一个与其它的比较,选出最大的(最小的)作为首位,然后继续从第二个进行比较。
步骤:2 8 7 9 1 0
第一遍:087921
第二遍:018972
第三遍:012987
第四遍:012798
第五遍:012789
代码:

for(int i=0;i<5;i++){
            for(int j=i+1;j<6;i++){
                if(a[i]>a[j]){
                    int tem=a[i];
                    a[i]=a[i+1];
                    a[i+1]=tem;
                }
            }
}

3.遍历查找
优点:简单方便;常用于数组、链表

int sort(char *arr,char a){
        char *p=arr;int i=0;
        while(p){

          if(*p==a){
              return i;
           } 
          p++;
          i++
        }
        return -1;
}

以上为遍历每一个字符的代码。
最重要的是代码的可重用性、可扩展性
4.二分查找
二分查找,又称折半查找。
目的:提高查找速度(当查找性能成为一个问题时,考虑二分查找)
使用前提:(1)必须是一个数组(2)必须已经排好序

int sort(int arr[],int n,int k){
        int low=0;int high=n-1;
        while(low<=high){
            int mid=(low+high)/2;
    if(arr[mid]==k){
                return  mid;
    }
    else if(arr[mid]<k){
            high=mid-1;
}else{
        low=mid+1;
}
}return -1;
}

复杂度为log2N,最少1次
5.静态表查找
以空间换时间,将运算式变为查表。
事先定义一个表,将结果存入表中,然后通过查表即可。