插入排序是有一个已经有序的数据序列,在这个已经排好的数据数列中插入一个数,要求插入后此数据序列仍然有序。这种算法适用于少量数据的排序,时间复杂度为O(n^2)
快速排序是找出一个元素作为基准,然后对数组进行分区操作。使基准左边的元素值都不大于基准值,基准右边的元素都不小于基准值,最后基准元素调到排序后的正确位置。然后再把基准左边和基准右边的元素序列分别做以上操作。
void insertsort(int a[],int len){
for(int i=1;i<len;i++){
int j=i-1;
int key=a[i];
while(j>=0 && a[j]>key){
a[j+1]=a[j];
j--;
}
a[j+1]=key;
}
};
冒泡排序是相邻的两个元素比较,像开水冒泡一样,每轮把最大或最小的元素放到最后,一直到所有轮走完,时间复杂度为O(n^2)
void bubblesort(int a[],int len){
for(int i=1;i<len;i++){
for(int j=0;j<len-i;j++){
if(a[j]>a[j+1]){
int tmp=a[j+1];
a[j+1]=a[j];
a[j]=tmp;
}
}
}
}
void selectsort(int a[],int len){
for(int i=0;i<len;i++){
int min=i;
for(int j=i;j<len;j++){
if(a[j]<a[min]){
min=j;
}
}
if(min!=i){
int tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
}
快速排序是找出一个元素作为基准,然后对数组进行分区操作。使基准左边的元素值都不大于基准值,基准右边的元素都不小于基准值,最后基准元素调到排序后的正确位置。然后再把基准左边和基准右边的元素序列分别做以上操作。
void quicksort(int a[],int l,int r){
int i=l;
int j=r;
int key=a[i];
if(l<r){
while(i<j){
while(j>i && a[j]>key){
j--;
}
if(j>i){
a[i]=a[j];
i++;
}
while(i<j && a[i]<key){
i++;
}
if(j>i){
a[j]=a[i];
j--;
}
}
a[i] =key;
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
}