排序之冒泡 选择 插入 快速(c++)

//***********************************************************
///*by Nicole 11/2017
//***********************************************************
#include<iostream>
#include<vector>
using namespace std;

//bubble sort//第一次浮上来最小的,第二次浮上来次小的`````
vector<int> bubble_(vector<int> &a ){
    int n=a.size();
    int temp=0;
    for(int i=0;i<n;i++){
      for(int j=n-1;j>i;j--){
          if(a[j]<a[j-1]){
              temp=a[j];
              a[j]=a[j-1];
              a[j-1]=temp;
          }
      }
      cout<<"第"<<i+1<<"层:";
      for(int m=0;m<n;m++){       
          cout<<a[m]<<"  ";
      }
      cout<<endl;
      cout<<"********************************************************"<<endl;
    }
    return a;
}


//choose sort//第一次选择最小的数放前面,第二次选择次小的数放第二位````` 
vector<int> choose_(vector<int> &a ){
    int n=a.size();
    int temp=0;
    for(int i=0;i<n;i++){
        int k=i;
        for(int j=i+1;j<n;j++){
            if(a[j]<a[k])         
                k=j;               //每次寻找次小的值,替换
        }
        if(k!=i){
            temp=a[k];
            a[k]=a[i];
            a[i]=temp;
        }
        cout<<"第"<<i+1<<"位数确定:";
        for(int o=0;o<n;o++)
            cout<<a[o]<<"  ";
        cout<<endl;
    }
    return a;
}

//insert sort//看作一开始只有一个数,第一次插入第一个数(此时两个数排好序),
//第二次插入第二个数到合适的位置(三个数排好序)``````` 
vector<int> insert_(vector<int> &a){
    int n=a.size();
    int temp=0;
    for(int i=1;i<n;i++){
        for(int j=i;j>0;j--){
            if(a[j]<a[j-1]){
                temp=a[j];
                a[j]=a[j-1];
                a[j-1]=temp;
            }           
        }
        cout<<i<<"个数插入:";
        for(int o=0;o<n;o++)
        cout<<a[o]<<"  ";
        cout<<endl;
        cout<<"******************************************************";
        cout<<endl;
    }
    return a;
}

//quick sort 分治法

void quick_(vector<int> &a,int l,int r){    
    int n=a.size();
    if (l < r){
        int i = l, j = r, x = a[l];
        while (i < j){
            while(i < j && a[j] >= x) // 从右向左找第一个小于x的数
                 j--; 
            if(i < j)
                 a[i++] = a[j];                    
            while(i < j && a[i] < x) // 从左向右找第一个大于等于x的数
                 i++; 
            if(i < j)
                 a[j--] = a[i];
        }
        a[i] = x;
        quick_(a, l, i - 1); // 递归调用
        for(int m=0;m<n;m++)
            cout<<a[m]<<"  ";
        cout<<endl;
        quick_(a, i + 1, r);

    }
}

void main()
{
    int a[10]={10,4,3,2,1,5,6,8,7,9};
    vector<int> b(a,a+10);
    quick_(b,0,9);
    while(1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值