#include<iostream>
using namespace std;
void bubble_sort()
{
int a[8]={70,50,30,20,10,80,40,60};
int cnt=0;
for(int i=0;i<7;i++)
{
//每一轮的最后一个都拍好了,就不需要再排了
for(int j=0;j<7-i;j++)
{
//如果大于后面那个,就交换
if(a[j]>a[j+1]) swap(a[j],a[j+1]);
}
cnt++;
cout<<"第"<<cnt<<"轮冒泡排序的结果:";
for(int i=0;i<=7;i++) cout<<a[i]<<" ";
cout<<endl;
}
cout<<"最终轮冒泡排序的结果:";
for(int i=0;i<=7;i++) cout<<a[i]<<" ";
cout<<endl;
}
void select_sort()
{
int a[8]={70,50,30,20,10,80,40,60};
int temp;//记录最小的位置
int cnt=0;
//只需要交换n-1次数
for(int i=0;i<8-1;i++)
{
temp=i;
//遍历未排好的就行
for(int j=i+1;j<8;j++)
{
//选出当前最小的位置即可
if(a[temp]>a[j]) temp=j;
}
//每次i的位置0-n-1
swap(a[temp],a[i]);
cnt++;
cout<<"第"<<cnt<<"轮选择排序的结果:";
for(int i=0;i<=7;i++) cout<<a[i]<<" ";
cout<<endl;
}
cout<<"最终轮选择排序的结果:";
for(int i=0;i<=7;i++) cout<<a[i]<<" ";
cout<<endl;
}
void insert_sort()
{
int a[8]={70,50,30,20,10,80,40,60};
//直接在数组上进行操作
//从第二个元素开始
int i,j;
int cnt=0;
for(i=1;i<8;i++)
{
//a[i-1]是有序序列
//小的话要处理一下
if(a[i]<a[i-1])
{
int tmp=a[i];
//cout<<a[i]<<endl;
for(j=i-1;j>=0&&a[j]>tmp;j--)
{
//cout<<j<<endl;
a[j+1]=a[j];
//cout<<a[j+1]<<endl;
}
//cout<<j<<endl;
a[j+1]=tmp;
//cout<<a[j+1]<<endl;
}
cnt++;
cout<<"第"<<cnt<<"轮选择插入的结果:";
for(int k=0;k<=7;k++) cout<<a[k]<<" ";
cout<<endl;
}
cout<<"最终轮插入排序的结果:";
for(int i=0;i<=7;i++) cout<<a[i]<<" ";
cout<<endl;
}
void shell_sort()
{
int a[8]={70,50,30,20,10,80,40,60};
//不断减少增量距离来排序
int i,j,g;
int n=8;
int cnt=0;
for(g=n/2;g>0;g/=2)
{
//针对每个gap的点
for(i=0;i<g;i++)
{
for(j=i+g;j<n;j+=g)
{
for(int k=j;k>i&&a[k]<a[k-g];k-=g)
{
//如果分组之后a与a+gap的位置的数小,交换之
swap(a[k-g],a[k]);
}
}
}
cnt++;
cout<<"第"<<cnt<<"轮希尔排序的结果:";
for(int k=0;k<=7;k++) cout<<a[k]<<" ";
cout<<endl;
}
cout<<"最终轮希尔排序的结果:";
for(int i=0;i<=7;i++) cout<<a[i]<<" ";
cout<<endl;
}
int main()
{
cout<<"********************************************"<<endl;
bubble_sort();
cout<<"********************************************"<<endl;
select_sort();
cout<<"********************************************"<<endl;
insert_sort();
cout<<"********************************************"<<endl;
shell_sort();
cout<<"********************************************"<<endl;
return 0;
}
基本的排序算法实现
于 2024-08-09 15:14:53 首次发布