分爲三個文件:
_sort.h,_sort.cpp,main.cpp
//_sort.h
#pragma once
#include<vector>
using namespace std;
void Bubble_sort(vector<int> vec);
void Selection_sort(vector<int> vec);
void Insertion_sort(vector<int> vec);
void Guibing_sort(vector<int> vec);
void Quick_sort(vector<int> vec);
//_sort.cpp
#include "_sort.h"
#include<iostream>
//冒泡排序:兩兩比較,將大值向後排列
void Bubble_sort(vector<int> vec)
{
int len = vec.size();
for (int i=0;i!=len-1;i++) //第一層循環:控制循環次數
{
for (int j = 0; j != len-1; j++) //第二次循環:排序
{
if (vec[j] > vec[j + 1])
{
int temp = vec[j];
vec[j] = vec[j + 1];
vec[j + 1] = temp;
}
}
}
for (int k = 0; k != len; k++)
{
cout << vec[k] << " ";
}
}
//選擇排序
void Selection_sort(vector<int> vec)
{
int len = vec.size();
for (int i = 0; i != len ; i++) //第一層循環:控制循環次數
{
int index=0;
for (int j = 0; j != len -i; j++) //循環,尋找最大值
{
if (vec[j] > vec[index])
{
index = j;
}
}
int temp = vec[len - 1 - i];
vec[len - 1 - i] = vec[index];
vec[index] = temp;
}
for (int k = 0; k != len; k++)
{
cout << vec[k] << " ";
}
}
//插入排序
void Insertion_sort(vector<int> vec)
{
int len = vec.size();
for (int i = 1; i != len; i++) //外循環控制循環次數
{
int value = vec[i];
for (int j = i-1; j >=0; j--) //內循環前i個數據排序
{ //注意:前一項大於此處數值時,便移位;但是,前一項小於此數值時,此時的位置爲該數值,且應該跳出循環,進行下一數值的排序
if (vec[j] > value)
vec[j + 1] = vec[j];
else
{
vec[j + 1] = value;
break;
}
}
}
for (int k = 0; k != len; k++)
{
cout << vec[k] << " ";
}
}
//歸併排序
void merge(vector<int> &vec, int begin, int mid, int end);
void G_sort(vector<int> &vec, int begin, int end);
void Guibing_sort(vector<int> vec)
{
G_sort(vec,0,vec.size()-1);
for (int k = 0; k != vec.size(); k++)
{
cout << vec[k] << " ";
}
}
void G_sort(vector<int> &vec,int begin, int end)
{
if (end-begin <= 0)
return;
int mid = begin+ (end-begin) / 2;
G_sort(vec, begin, mid);
G_sort(vec, mid+1, end);
merge(vec,begin,mid,end);
}
void merge(vector<int> &vec,int begin,int mid,int end)
{
vector<int> m;
int left = begin;
int right = mid + 1;
for (int i = begin; i <= end; i++)
{
if (left <= mid && right <= end)
{
if (vec[left] <= vec[right])
{
m.push_back(vec[left]);
left++;
}
else
{
m.push_back(vec[right]);
right++;
}
}
else
{
if (left <= mid)
{
m.push_back(vec[left]);
left++;
}
else if (right <= end)
{
m.push_back(vec[right]);
right++;
}
}
}
for (int j = 0; j != m.size(); j++)
{
vec[begin + j] = m[j];
}
}
//快速排序
int fenjie(vector<int> &vec, int begin, int end);
void q_sort(vector<int> &vec, int begin, int end);
void Quick_sort(vector<int> vec)
{
int len = vec.size();
q_sort(vec,0,len-1);
for (int k = 0; k != len; k++)
{
cout << vec[k] << " ";
}
}
void q_sort(vector<int> &vec, int begin,int end)
{
if (end - begin <= 0)
return;
int index=fenjie(vec,begin,end);
q_sort(vec,begin,index-1);
q_sort(vec,index+1,end);
}
int fenjie(vector<int> &vec, int begin, int end)
{
vector<int> vec1, vec2;
for (int i = begin + 1; i <= end; i++)
{
if (vec[i] < vec[begin])
vec1.push_back(vec[i]);
else
vec2.push_back(vec[i]);
}
int value = vec[begin];
int j = begin + vec1.size();
for (int k = 0; k != vec1.size(); k++)
vec[begin + k] = vec1[k];
vec[j] = value;
for (int k = 0; k != vec2.size(); k++)
vec[j + 1 + k] = vec2[k];
vec1.clear();
vec2.clear();
return j;
}
main.cpp:測試
// main.cpp
#include "_sort.h"
#include<iostream>
int main()
{
vector<int> v;
v.push_back(7);
v.push_back(12);
v.push_back(99);
v.push_back(85);
v.push_back(42);
v.push_back(75);
v.push_back(66);
v.push_back(44);
Bubble_sort(v); //冒泡排序:在函數內部排序成功;由於是局部函數且沒有添加&,所以排序後,原容器內數據順序不變
cout << endl;
Selection_sort(v);
cout << endl;
Insertion_sort(v);
cout << endl;
Guibing_sort(v);
cout << endl;
Quick_sort(v);
system("pause");
return 0;
}