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

来源:互联网 发布:linux项目新手 编辑:程序博客网 时间:2024/06/09 13:44
// 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_sortint 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
原创粉丝点击