直接插入排序
选第二个,与第一个进行比较,按顺序进行排列,然后选第三个与前两个进行比较,按顺序进行排列,以次类推,直到整个序列有序。
希尔排序
缩小增量排序
快速排序
就是以第一个数中心排,第一个左边的都是比它小的,第一个右边的都是比它大的,每次比的时候都是把那个数填到那个空洞里。
冒泡排序
第一个数与后面的数进行比较,要是遇见比自己大的数,就交换让这个比自己大的数与后面的数进行比较,直到比较到最后一个数,这算是比较的一趟
选择排序
#include<iostream>
using namespace std;
const int maxn=1000;
int A[maxn];
void selectSort(int n){
for(int i=0;i<n;i++){
int k=i;
for(int j=i;j<n;j++){
if(A[j]<A[k]){
k=j;
}
}
int temp=A[i];
A[i]=A[k];
A[k]=temp;
cout<<"第"<<i+1<<"次的输出结果:";
for(int l=0;l<n;l++){
cout<<A[l]<<' ';
}
cout<<endl;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>A[i];
}
selectSort(n);
}
/*
测试数据
5
6 7 3 4 2
*/
插入排序
#include<iostream>
using namespace std;
const int maxn=1000;
int A[maxn];
void inseartSort(int n){
for(int i=0;i<n;i++){
int temp=A[i],j=i;
while(j>0&&temp<A[j-1]){
A[j]=A[j-1];
j--;
}
A[j]=temp;
cout<<"第"<<i+1<<"次的输出结果:";
for(int l=0;l<n;l++){
cout<<A[l]<<' ';
}
cout<<endl;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>A[i];
}
inseartSort(n);
}
/*
测试数据
5
6 7 3 4 2
*/
归并排序
递归实现
void merge(int A[],int L1,int L2,int R1,int L2,int R2){
int i=L1,j=L2;
int temp[maxn],index=0;
while(i<=R1&&j<=R2){
if(A[i]<=A[j]){
temp[index++]=A[i++];
}else{
temp[index++]=A[j++];
}
}
while(i<=R1){
temp[index++]=A[i++];
}
while(j<=R2){
temp[index++]=A[j++];
}
for(int i=0;i<index;i++){
A[L1+i]=temp[i];
}
}
void mergeSort(int A[],int left,int right){
if(left<right){
int mid=(left+right)/2;
mergeSort(A,left,mid);
mergeSort(A,mid,right);
merge(A,left,mid,mid+1,right);
}
}
非递归实现
冒泡排序
冒泡排序中,较小的数上浮,较大的数下沉,相邻的两个数两两比较,若不为升序,则交换位置
快速排序
选最左侧的一个数,跟每一个数进行比较,实现的结果是将比这个数小的数都放在左侧,大的都放在右侧