排序算法可以说是我第一个接触的算法,将一个无序序列按某个规则进行有序排列,而排序算法多种多样,深入理解排序算法,选择最适合的那个算法去解决问题,是我们应该学习和掌握的。
1. 冒泡排序
冒泡排序算法是排序算法中最基础的一种,它的本质在于两个数之间的交换,如果按从小到大的顺序将某一无序序列进行排序,冒泡的思想就是每次通过交换的方式将当前剩余元素的最大值放到一端,直到元素的个数减少为0。
例如:存在一个无序序列{8,9,6,5,7,3,2,1,4,0},使用冒泡算法按从小到大的顺序进行排序。
实现代码:
#include<iostream>
using namespace std;
int main()
{
int arry[]={8,9,6,5,7,3,2,1,4,0};
for(int i=0;i<10;i++)
{
for(int j=0;j<10-i;j++)
{
if(arry[j]>arry[j+1])//每次判断相邻的两个数,将最大的那个放到最后面
{
int temp = arry[j];
arry[j] = arry[j+1];
arry[j+1] = temp;
}
cout<<arry[j]<<" ";
}
cout<<endl;
}
for(int i=0;i<10;i++)
{
cout<<arry[i]<<" ";
}
return 0;
}
运行结果:
2.选择排序
选择排序也是最简单的排序算法之一,它的思想是对一个无序序列arry中的元素arry[i] ~arry[n],从i到n进行枚举,进行n趟操作,每趟从待排序的部分序列[i,n]里找最小的一个元素与arry[i]进行交换。
例如:存在一个无序序列{8,9,6,5,7,3,2,1,4,0},使用选择算法按从小到大的顺序进行排序。
#include<iostream>
using namespace std;
int main()
{
int arry[]={8,9,6,5,7,3,2,1,4,0};
for(int i=0;i<10;i++) //进行n趟操作
{
int k = i;
for(int j=i;j<10;j++)
{
if(arry[k]>arry[j])//选出i到n中最小的元素,下标为k
{
k=j;
}
cout<<arry[j]<<" ";
}
int temp = arry[i];
arry[i] = arry[k];
arry[k] = temp;
cout<<endl;
}
for(int i=0;i<10;i++)
{
cout<<arry[i]<<" ";
}
return 0;
}
运行结果:
3.直接插入排序
对无序序列A的n个元素A[1]~A[n],令i从2到n枚举,进行n-1趟操作;每一趟将无序序列的元素插入到有序序列的元素中。
例如:存在一个无序序列{8,9,6,5,7,3,2,1,4,0},使用直接插入算法按从小到大的顺序进行排序。
#include<iostream>
using namespace std;
int main()
{
int A[]={8,9,6,5,7,3,2,1,4,0};
for(int i=1;i<10;i++)
{
int j = i;
int temp = A[i]; //temp临时存放A[i],j从i开始向前枚举
while(j>0&&temp<A[j-1])
{
A[j] = A[j-1];
j--;
}
A[j] = temp;
for(int k=0;k<10;k++)
{
cout<<A[k]<<" ";
}
cout<<endl;
}
return 0;
}
运行结果:
先写到这里,其他方法以后再写。