本文章都假设将数组从小到大排序。
一、冒泡排序(Bubble Sort)
1.算法思想:从底至上地把小的气泡逐步向上升,经过n趟遍历即可使数 组有序。
2.代码实现:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
void BubbleSort(int *num,int n)
{
for(int i=0;i<n;i++)
{
for(int j=n-1;j>i;j--)
{
if(num[j]<num[j-1]) swap(num[j],num[j-1]);
}
}
}
int main()
{
int num[100],n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&num[i]);
cout<<"Before sort"<<endl;
for(int i=0;i<n;i++) cout<<num[i]<<' ';
cout<<endl;
BubbleSort(num,n);
cout<<"After sort"<<endl;
for(int i=0;i<n;i++) cout<<num[i]<<' ';
cout<<endl;
return 0;
}
二、选择排序(Selection Sort)
1.算法思想:我的理解嘛,就是,选定第i个数据,从[i+1,n)中找到比第i个数小且最小的数,与第i个数交换位置,遍历n-1次即可完成排序。
2.代码实现:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
void Selectionsort(int *num,int n)
{
for(int i=0;i<n;i++)
{
int k=i;
for(int j=i+1;j<n;j++)
{
if(num[j]<num[k])
k=j;
}
if(k!=i) swap(num[k],num[i]);
}
}
int main()
{
int num[100],n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&num[i]);
cout<<"Before sort"<<endl;
for(int i=0;i<n;i++) cout<<num[i]<<' ';
cout<<endl;
Selectionsort(num,n);
cout<<"After sort"<<endl;
for(int i=0;i<n;i++) cout<<num[i]<<' ';
cout<<endl;
return 0;
三、直接插入排序(Straight Insertion Sort)
1.算法思想:把n个待排序的元素看成一个有序表和一个无序表,最开始的时候有序表中只含有一个元素无序表中含有n-1个元素。之后每次从无序表中选取第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次即可完成排序。
2.代码实现:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
using namespace std;
void StraightInsertionSort(int *num,int n)
{
for(int i=0;i<n;i++)
{
int j,k;
for(j=i-1;j>=0;j--)
if(num[j]<num[i]) break;
if(j!=i-1)
{
int temp=num[i];
for(k=i-1;k>j;k--) num[k+1]=num[k];
num[k+1]=temp;
}
}
}
int main()
{
int num[100],n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&num[i]);
cout<<"Before sort"<<endl;
for(int i=0;i<n;i++) cout<<num[i]<<' ';
cout<<endl;
StraightInsertionSort(num,n);
cout<<"After sort"<<endl;
for(int i=0;i<n;i++) cout<<num[i]<<' ';
cout<<endl;
return 0;
}
四、时间复杂度分析
以上三种排序都是O(n2)的,所以在初学阶段使用,以后还会有更加高效的排序算法。