1 插入排序
//插入排序
//主要思想:将数组中的第一个数认为是有序排列,剩下的n-1个数与第一个数比较,再进行排序
//有两层循环,第一层控制排序的趟数,第二层控制每一趟比较的个数
#include<iostream>
using namespace std;
int main(){
int k,x=0; //数组的个数
int a[10]={0};
for(int i=0;i<10;i++)cin>>a[i]; //记录所有数组
for(int i=0;i<10;i++){
x=a[i];//先将要比较的数字抽出来
for(k=i;k>0;k--){//从后往前比较,便于移动数组
if(a[k-1]>x){a[k]=a[k-1];a[k-1]=x;}//如果前面的数比后面的数大,前面的数后移
else break;
}
a[k]=x;//完成插入操作
}
for(int i=0;i<10;i++)cout<<a[i]<<' ';
cout<<endl;
return 0;
}
2 冒泡排序
//冒泡排序
#include<iostream>
using namespace std;
#define N 10
int main(){
int a[N];
int temp;//定义一个标杆
for(int i=0;i<N;i++)cin>>a[i];
for(int i=0;i<N-1;i++){//外层循环表示循环的趟数
for(int j=N-1;j>i;j--){//内层循环表示每一趟排序的数字
if(a[j]>a[j-1]){//从大到小排序
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
for(int i=0;i<N;i++){
cout<<a[i]<<' ';
}
cout<<endl;
return 0;
}
3 快速排序
#include<iostream>
#include<cstdio>
using namespace std;
void quicksort(int s[],int left,int right){
if(left<right){//只有当left<right时才执行快速排序
int i=left,j=right,x=s[left];//初始值
while(i<j){
while(i<j&&s[j]>=x)j--;//从右往左找第一个小于x的数
if(i<j)s[i++]=s[j];//进行填数
while(i<j&&s[i]<x)i++;//从左往右找第一个大于x的数
if(i<j)s[j--]=s[i]; //进行填数
}
s[i]=x;//把基准数填上
quicksort(s,left,i-1);
quicksort(s,i+1,right);
}
}
int main(){
int s[]={14,18,11,30,28,4};
for(int i=0;i<6;i++)cout<<s[i]<<' ';
cout<<endl;
quicksort(s,0,5);
for(int i=0;i<6;i++){
cout<<s[i]<<' ';
}
cout<<endl;
return 0;
}
希尔排序、堆排序、插入排序再续