数据结构

Posted 徐王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构相关的知识,希望对你有一定的参考价值。

排序

#include<stdio.h>
//default order is not descending order
void init(int *a,int n){
    //int i;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
}

void InsertSort(int *a,int n){
    //简单插入排序(稳定)
    for(int i=2;i<=n;i++){
        if(a[i]<a[i-2]){
            a[0]=a[i];
            a[i]=a[i-1];
            for(int j=i-2;a[0]>a[j];j--){
                a[j+1]=a[j];
            }
            a[j+1]=a[0];
        }
    }
}

void BiInsertSort_book(int *a,int n){
    //折半插入排序(稳定)
    for(int i=2;i<=n;i++){
        a[0]=a[i];
        int l=1,r=i-1;
        while(l<=r){
            int mid=(l+r)/2;
            if(a[0]<a[mid])r=mid-1;
            else l=mid+1;
        }
        for(int j=i-1;j>=r+1;j--)
            a[j+1]=a[j];
        a[r+1]=a[0];
    }
}


void ShellInsert(int *a,int dk,int n){
    for(int i=dk+1;i<=n;i++){
        if(a[i]<a[i-dk]){
            a[0]=a[i];
            int j;
            for(j=i-dk;j>0&&a[0]<a[j];j-=dk){
                a[j+dk]=a[j];
            }
            a[j+dk]=a[0];
        }
    }
}
void ShellSort(int *a,int n){
    //希尔排序(缩小增量排序)(不稳定)
    int t,dlta[50];
    int tmp=n-1;
    while((tmp>>=1))
        t++;
    for(int k=0;k<=t;k++){
        dlta[t-k]=tmp+;
        tmp<<=1;
    }
    for(int i=0;i<=t;i++){
        ShellInsert(a,dlta[i],n);
    }
}

int binary_search_3(int a[], int n, int key)
{
    //求最小的i,使得a[i] > key,若不存在,则返回-1
    int m, l = 0, r = n - 1;//闭区间[0, n - 1]
    while (l < r)
    {
        m = l + ((r - l) >> 1);//向下取整
        if (a[m] <= key) l = m + 1;
        else r = m;
    }
    if (a[r] > key) return r;
    return -1;
}

int BiSearch(int *a,int n,int x){
    //二分查找,数据存在a[1]到a[n],找不到返回0
    int l=1,r=n;
    while(l<=r){
        int mid=(l+r)/2;
        if(a[mid]==x)return mid;
        if(x<a[mid])r=mid-1;
        else l=mid+1;
    }
    return 0;
}

void BubbleSort(int *a,int n){
    //冒泡排序(稳定)
    for(int i=1;i<n;i++){
        for(int j=i;j<n;j++){
            if(a[j]>a[j+1]){
                a[0]=a[j];
                a[j]=a[j+1];
                a[j+1]=a[0];
            }
        }
    }
}

int Partition(int *a,int l,int r){
    a[0]=a[l];
    while(l<h){
        while(l<r&&a[r]>=a[0])r--;
        a[l]=a[r];
        while(l<r&&a[l]<=a[0])l++;
        a[r]=a[l];
    }
    return l;
}
void QuickSort2(int *a,int l,int r){
    //快速排序
    if(l<h){
        int pivot=Partition(a,l,r);
        QuickSort2(a,l,pivot-1);
        QuickSort2(a,pivot+1,r);
    }
}
void QuickSort(int *a,int n){
    QuickSort2(a,1,n);
}

void SelectSort(int *a,int n){
    //简单选择排序(不稳定)
    for(int i=1;i<n;i++){
        a[0]=i;
        for(int j=i+1;j<=n;j++){
            if(a[j]<a[a[0]]){
                a[0]=j;
            }
        }
        if(a[0]!=i){
            int tmp=a[0];
            a[0]=a[i];
            a[i]=a[tmp];
            a[tmp]=a[i];
        }
    }
}

void PileSort(int *a,int n){
    //堆排序

}

void MergeSort(int *a,int n){
    //二路归并

}

void RadixSort(int *a,int n){
    //基数排序

}

int main(){
    int a[20],n;
    scanf("%d",&n);
    init(a,n);
}

 

以上是关于数据结构的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段5——HTML元素结构

超级有用的9个PHP代码片段

python 用于数据探索的Python代码片段(例如,在数据科学项目中)

将代码片段插入数据库并在 textarea 中以相同方式显示

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)