// 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;
}
冒泡,插入,归并,快排算法C++实现
最新推荐文章于 2024-03-15 17:22:03 发布