插入排序
1.直接插入排序
#include<stdio.h>
void insertSort(int num[],int t){
int i,j,k;
for(i=1;i<t;i++){
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;
}
}
}
void show(int num[],int t){
for(int i=0;i<t;i++)
printf("%d ",num[i]);
printf("\n");
}
int main(){
int num[10]={2,1,3,4,5,6,6,0,9,8};
insertSort(num,10);
show(num,10);
}
2.希尔排序
#include<stdio.h>
#include <algorithm>
using namespace std;
void shell(int num[],int t,int x){
int a,b,c;
for(a=x;a<t;a++){
c=num[a];
b=a-x;
while(c<num[b]&&b>=0){
num[b+x]=num[b];
b-=x;
}
num[b+x]=c;
}
}
void shellSort(int num[],int t){
for(int i=t;i>0;i=(i-1)/2)
shell(num,t,i);
}
void show(int num[],int t){
for(int i=0;i<t;i++)
printf("%d ",num[i]);
printf("\n");
}
int main(){
int num[10]={2,1,3,4,5,6,6,0,9,8};
shellSort(num,10);
show(num,10);
}
交换排序
1.
冒泡排序
#include<stdio.h>
#include <algorithm>
using namespace std;
void BubbleSort(int num[],int t){
int i,j,k;
for(i=1;i<t;i++){
for(j=0;j<t-i;j++){
if(num[j]>num[j+1])
swap(num[j],num[j+1]);
}
}
}
void show(int num[],int t){
for(int i=0;i<t;i++)
printf("%d ",num[i]);
printf("\n");
}
int main(){
int num[10]={2,1,3,4,5,6,6,0,9,8};
BubbleSort(num,10);
show(num,10);
}
2.
快速排序
#include<stdio.h>
#include <algorithm>
using namespace std;
int adjust(int num[],int l,int r){
int i=l,j=r;
int x=num[l];
while(i<j){
while(i<j&&num[j]>x)
j--;
if(i<j){
num[i]=num[j];
i++;
}
while(i<j&&num[i]<x)
i++;
if(i<j){
num[j]=num[i];
j--;
}
}
num[i]=x;
return i;
}
void quickSort(int num[],int l,int r){
if(l<r){
int t=adjust(num,l,r);
quickSort(num,l,t-1);
quickSort(num,t+1,r);
}
}
void show(int num[],int t){
for(int i=0;i<t;i++)
printf("%d ",num[i]);
printf("\n");
}
int main(){
int num[10]={2,1,3,4,5,6,6,0,9,8};
quickSort(num,0,9);
show(num,10);
}
选择排序
1.
直接选择排序
#include<stdio.h>
#include <algorithm>
using namespace std;
void selectSort(int num[],int t){
int i,j,k,x;
for(i=1;i<t;i++){
x=num[0];
k=0;
for(j=1;j<t+1-i;j++){
if(num[j]>x){
x=num[j];
k=j;
}
}
swap(num[k],num[t-i]);
}
}
void show(int num[],int t){
for(int i=0;i<t;i++)
printf("%d ",num[i]);
printf("\n");
}
int main(){
int num[10]={2,1,3,4,5,6,6,0,9,8};
selectSort(num,10);
show(num,10);
}
2.堆排序
归并排序
#include<stdio.h>
void mergearray(int num[],int l,int mid,int r,int temp[]){
int i=l,j=mid+1;
int m=mid,n=r;
int k=0;
while(i<=m&&j<=n){
if(num[i]<=num[j])
temp[k++]=num[i++];
else
temp[k++]=num[j++];
}
while(i<=m)
temp[k++]=num[i++];
while(j<=n)
temp[k++]=num[j++];
for(i=0;i<k;i++)
num[l+i]=temp[i];
}
void mergeSort(int num[],int l,int r,int temp[]){
if(l<r){
int mid=(l+r)/2;
mergeSort(num,l,mid,temp);
mergeSort(num,mid+1,r,temp);
mergearray(num,l,mid,r,temp);
}
}
bool MergeSort(int num[],int n){
int *p=new int[n];
if(p==NULL)
return false;
mergeSort(num,0,n-1,p);
delete[] p;
return true;
}
void show(int num[],int t){
for(int i=0;i<t;i++)
printf("%d ",num[i]);
printf("\n");
}
int main(){
int num[10]={2,1,3,4,5,6,6,0,9,8};
MergeSort(num,10);
show(num,10);
}
基数排序