码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构

时间:2017-10-12 12:08:36      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:des   插入排序   排序   返回   pre   art   nbsp   pil   style   

排序

#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);
}

 

数据结构

标签:des   插入排序   排序   返回   pre   art   nbsp   pil   style   

原文地址:http://www.cnblogs.com/xuwangzihao/p/7655297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!