查找和sort排序

顺序查找

//顺序查找
template<class T>
int sequentialSearch(T a[],int n,const T&x){
    //在数组a[0:n-1]中查找元素x
    //如果找到,则返回该元素的位置,否则返回-1
    int i;
    for(i=0;i<n&&a[i]!=x;i++);
    if(i==n)return -1;
    return i;
}

在有序数组插入一个元素

//在一个有序数组插入一个元素
template<class T>
void insert(T a[],int &n,const T&x){
    int i;
    for(i=n-1;i>=0&&a[i]>x;i--){
        a[i+1]=a[i];
    }
    a[i+1]=x;
    n++;
}

选择排序

简化版

//选择排序:依次找到最大的元素
template<class T>
void selectionSort(T a[],int n){
    //给a[0:n-1]排序
    for(int size=n;size>1;size--){
        int j=indexofMax(a,size);
        swap(a[j],a[size-1]);
    }
}

及时终止的选择排序

//及时终止的选择排序
template<class T>
void selectionSort(T a[],int n){
    bool sorted=false;
    //找到size对应的数字
    for(int size=n;!sorted&&(size>1);size--){
        int indexofMax=0;
        for(int i=1;i<size;i++){
            if(a[indexofMax]<a[i])indexofMax=i;
            else sorted=false;
        }
        swap(a[indexofMax],a[size-1]);
    }
}

冒泡排序

普通版

//冒泡排序
//一次冒泡过程
template<class T>
void bubble(T a[],int n){
    for(int i=0;i<n;i++){
        if(a[i]>a[i+1])swap(a[i],a[i+1]);
    }
}
template<class T>
void bubblesort(T a[],int n){
    for(int i=n;i>1;i++){
        bubble(a,i);
    }
}

及时终止的冒泡排序

//及时终止的冒泡排序
template <class T>
bool bubble(T a[],int n){
    bool swapped=false;//目前为止未交换
    for(int i=0;i<n-1;i++){
        if(a[i+1]<a[i]){
            swapped=true;
            swap(a[i+1],a[i]);
        }
    }
    return swapped;
}

template<class T>
void bubblesort(T a[],int n){
    //及时终止冒泡排序
    for(int i=n;i>1&&bubble(a,i);i--);
}

原地重排数组

名次存在于r[]

//原地重排数组,名次存于r[]
template<class T>
void rearrange(T a[],int n,int r[]){
    for(int i=0;i<n;i++){
        while (r[i]!=i)
        {
            int t=r[i];
            swap(a[t],a[i]);
            swap(r[t],r[i]);
        }
        
    }
}

插入排序

1.第一种

//插入排序
template<class T>
void insert(T a[],int n,const T&x){
    for(int i=n-1;i>=0&&x<a[i];i--){
        a[i+1]=a[i]
    }
    a[i+1]=x;
}

template<class T>
void insertsort(T a[],int n){
    for(int i=0;i<n;i++){
        T t=a[i];
        insert(a,i,t);
    }
}

2.另外一种

//另外一种插入排序
template<class T>
void insertionSort(T a[],int n){
    for(int i=1;i<n;i++){
        //把a[i]插入a[0:i-1]中
        T t=a[i];
        int j;
        for(int j=i-1;j>=0&&t<a[j];j--){
            a[j+1]=a[j];
        }
        a[j+1]=t;
    }
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值