基于C++编写,实现方法不一定特别高效(不出意外应该都是对的)。
冒泡排序
比较简单的一种排序,时间空间效率都一般,基本上没有多少人使用吧。
//冒泡排序
void MaoPaoSort(int a[],int num = 10)
{
bool flag = 1;
for(int i = 1;i < num;++i)
{
flag = 1;
for(int j = 0;j < num - i ;++j)
{
if(a[j]>a[j + 1])
{
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
flag = 0;
}
}
if (flag)
{
cout<<"提前结束排序!"<<endl;
break;
}
}
cout<<"冒泡排序:"<<endl;
for(int i = 0;i < num;++i)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
简单选择排序
比较简单的一种排序,时间空间效率都一般,基本上没有多少人使用吧。
//简单选择排序
void ChoiceSort(int a[],int num = 10)
{
int index = 0;
for(int i = 0;i < num - 1;++i)
{
index = i;
for(int j = i + 1;j < num;++j)
{
if(a[j] < a[index])
{
index = j;
}
}
int t = a[i];
a[i] = a[index];
a[index] = t;
}
cout<<"选择排序:"<<endl;
for(int i = 0;i < num;++i)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
快速排序
时间效率很高,但肯定不是最快的排序算法,属于不稳定的排序,挺好的方法。
//快速排序
void QuickSort(int a[],int start,int end)
{
if (start<end)
{
int low = start;
int high = end;
int temp = a[start];
while(low < high)
{
while(a[high]>= temp && high > low)
{
high--;
}
a[low] = a[high];
while(a[low]<= temp && low < high)
{
low++;
}
a[high] = a[low];
}
a[high] = temp;
QuickSort(a,start,low - 1);
QuickSort(a,high + 1,end);
}
cout<<"快速排序:"<<endl;
for(int i = 0;i <= end;++i)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
归并排序
归并排序是一种稳定的排序,运行高效,缺点是占用内存大,不过现在存储空间较为便宜,也是可以接受的。
#include<iostream>
using namespace std;
#define LENGTH 10
//归并排序
void MergeSort(int* a, int start = 0, int length = LENGTH - 1)
{
if (start < length)
{
int mid = (length + start) / 2;
MergeSort(a, start, mid);
MergeSort(a, mid + 1, length);
int temp[LENGTH] = { 0 };
int p = start;
int q = mid + 1;
int s = 0;
while (p <= mid && q <= length)
{
if (a[p] <= a[q]) {
temp[s++] = a[p++];
}
else {
temp[s++] = a[q++];
}
}
while (p <= mid) {
temp[s++] = a[p++];
}
while (q <= length) {
temp[s++] = a[q++];
}
for (int i = start; i < start + s; i++)
{
a[i] = temp[i - start];
}
}
}
int main()
{
int a[LENGTH] = { 0,2,4,6,8,9,7,5,3,1 };
MergeSort(a, 0, LENGTH - 1);
cout << "归并排序:";
for (int i = 0; i < LENGTH; i++)
{
cout << a[i] << ' ';
}
cout << endl;
return 0;
}