冒泡,插入,归并,快排算法C++实现

// sort_alogrithm.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;
//冒泡排序
void pubbleSort(vector<int>& nums){
     int n=nums.size();

     for(int i=0;i<n;++i){
         for(int j=i;j<n;++j){
             if(nums[i]>nums[j]){
                int temp = nums[j];
                nums[j]=nums[i];
                nums[i]=temp;
             }
         }
     }

     for(int i=0;i<n;++i){
        cout<<nums[i]<<" "<<endl;
     }
} 
 //insertSort 

void insertion_sort(vector<int>& nums)
{
    int n=nums.size();

    for(int j=1;j<n;++j){
        int temp=nums[j];
        int i=j-1;
        while(i>=0&&nums[i]>temp){
            nums[i+1]=nums[i];
            --i;
        }
        nums[i+1]=temp;
    }
    for(int i=0;i<n;++i){
        cout<<nums[i]<<" ";
     }
}

//归并排序
int min(int a,int b){
    return a<b?a:b;
}
void merge_aux(vector<int>& nums,int i,int j){
    if(i>=j)
        return;
    int mid = (i+j)/2;
    merge_aux(nums,i,mid);
    merge_aux(nums,mid+1,j);
    vector<int> temp(j-i+1);
    int m=i,n=mid+1,k=0;
    while(m<=mid||n<=j){
        int first = m>mid? INT_MAX:nums[m];
        int second = n>j?INT_MAX:nums[n];
        if(first<second)
            ++m;
        else
            ++n;
        temp[k++]=min(first,second);
    }
    for(int m=0;m<k;++m){
        nums[i+m]=temp[m];
    }
}
void merge_sort(vector<int>& nums){
    int n = nums.size();
    merge_aux(nums,0,n-1);
    for(int i=0;i<n;++i){
        cout<<nums[i]<<" ";
     }
}


//quick_sort
int partition(vector<int>& nums,int i,int j){
    int index = rand()%(j-i+1)+i;
    int val = nums[index];
    nums[index]=nums[j];
    nums[j]=val;
    int last=i;
    for(int m=i;m<=j;++m){
        if(nums[m]<nums[j]){
             int temp=nums[m];
             nums[m]=nums[last];
             nums[last]=temp;
             last++;
        }
    }
    nums[j]=nums[last];
    nums[last]=val;
    return last;
}
void quick_aux(vector<int>& nums,int i,int j){
    if(i<j){
        int last = partition(nums,i,j);
        quick_aux(nums,i,last-1);
        quick_aux(nums,last+1,j);
    }
}
void quick_sort(vector<int>& nums){

      quick_aux(nums,0,nums.size()-1);
}
int _tmain(int argc, _TCHAR* argv[])
{
    int a[]={1,3,4,5,67,5,4,3,4,56,67,54,3,4,5,65};
    vector<int> test(a,a+16);
    //pubbleSort(test);
    // insertion_sort(test);
     merge_sort(test);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值