您的位置:首页 > 编程语言 > C语言/C++

C++实现冒泡排序,选择排序,插入排序,快速排序,归并排序

2017-04-12 15:32 627 查看
C++实现冒泡排序,选择排序,插入排序,快速排序,归并排序。

#include<iostream>
using namespace std;

void BubbleSort(int *a,int len); //冒泡排序
void SelectSort(int *a,int len); //选择排序
void InsertSort(int *a,int len); //插入排序
void QuickSort(int *a,int low, int high); //快速排序
void MergeSort(int* a, int low, int high); //归并排序
void print(int* a, int len); //输出函数

int main()
{
int a[10]={9,10,8,6,5,3,2,1,4,7};
// BubbleSort(a, 10);
// SelectSort(a, 10);
// InsertSort(a, 10);
// QuickSort(a, 0, 9);
MergeSort(a, 0, 9);
print(a, 10);
}

//冒泡排序
void BubbleSort(int *a,int len)
{
int temp;
for(int i=0; i<len; ++i){
for(int j=0; j<len-i-1; ++j){
if(a[j]>a[j+1]){
temp =a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}

//选择排序
void SelectSort(int *a,int len)
{
for(int i=0; i<len; ++i){
int m_index = i;
for(int j=i+1; j<len; ++j){
if(a[j] < a[m_index]){
m_index = j;
}
}
int temp = a[m_index];
a[m_index] = a[i];
a[i] = temp;
}
}

//插入排序
void InsertSort(int *a,int len)
{
for(int i=0; i<len; ++i){
for(int j=i; j>0; --j){
if(a[j]<a[j-1]){
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
}

//快速排序
void QuickSort(int *a,int low, int high)
{
if(low < high)
{
int i = low, j = high,x = a[low];
while(i < j)
{
while(i < j && a[j] >= x) j--;
if(i < j)
a[i++] = a[j];
while(i < j && a[i] <= x) i++;
if(i < j)
a[j--] = a[i];
}
a[i] = x;
QuickSort(a,low,i-1);
QuickSort(a,i+1,high);
}
}

//归并排序
void merge_(int* a, int low, int mid, int high)
{
int i = low;
int j = mid+1;
int k = 0;
int* b = new int[high-low+1];
while(i <= mid && j <= high)
{
if(a[i] < a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
while(i <= mid)
b[k++] = a[i++];

while(j <= high)
b[k++] = a[j++];

for(int y=0, x=low; x<=high ; ++y, ++x)
a[x]=b[y];
}

void MergeSort(int* a, int low, int high)
{
if(low < high)
{
int q = (low + high)/2;
MergeSort(a, low, q);
MergeSort(a, q+1, high);
merge_(a, low, q, high);
}
}

//计数排序
void CountSort(int* a, int len)
{
int max_ = a[0], n=0;
for(int i = 0; i<len; ++i)
{
if(a[i]>max_)
max_ = a[i];
}
int b[max_+1];
for(int k=0; k <= max_; ++k)
{
b[k]=0;
}
for(int j=0; j<len; ++j)
{
b[a[j]]++;
}
for(int s=0; s <= max_; ++s)
{
while(b[s] != 0)
{
a[n++]=s;
b[s]--;
}
}
}

//输出函数
void print(int* a, int len){
for (int i = 0; i< len; i++)
cout
4000
<< a[i] << " ";
cout << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐