桶排序
缺点:浪费空间
#include<stdio.h>
int main()
{
int a[11]={0};
int n;
scanf("%d",&n);//n为输入数的总个数 //6
int i;
for(i=0;i<n;i++){
int x;
scanf("%d",&x);//x范围1-10
a[x]++;
} //5 9 1 7 3 8
for(i=1;i<11;i++){//从小到大
int j;
for(j=0;j<a[i];j++){//输出重复数字
printf("%d ",i);
}
} //1 3 5 7 8 9
printf("\n");
for(i=10;i>0;i--){//从大到小
int j;
for(j=0;j<a[i];j++){
printf("%d ",i);//输出重复数字
}
} //9 8 7 5 3 1
return 0;
}
冒泡排序
核心:比较相邻元素,有错交换
缺点:时间复杂度为 O(N^2)
#include<stdio.h>
int main()
{
int a[100]={0};
int n;
scanf("%d",&n);//n为输入数的总个数 //5
int i;
for(i=0;i<n;i++){
int x;
scanf("%d",&a[i]);
} //1 8 3 7 6
int j;
for(i=0;i<n-1;i++){ //走的趟数
for(j=0;j<n-1-i;j++){ //每一趟走的次数
if(a[j]>a[j+1]){ //从小到大
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
} //1 3 6 7 8
return 0;
}
快速排序
缺点:含有递归(浪费空间)
#include<stdio.h>
void quickSort(int left,int right);
int a[10];
int main()
{
int i;
int cnt;
scanf("%d",&cnt);//输入数字个数不大于10
for(i=0;i<cnt;i++){
scanf("%d",&a[i]);
}
quickSort(0,cnt-1);
for(i=0;i<cnt;i++){
printf("%d ",a[i]);
}
return 0;
}
void quickSort(int left,int right)
{
int i,j,benchmark;
if(left>=right){ //递归边界
return;
}else{
i=left;//i为由左向右运动索引
j=right;//j为由右向左运动索引
benchmark=a[left];//benchmark本次递归的基准
while(i<j){
while((a[j]>=benchmark)&&(i<j)){
j--;
};
while((a[i]<=benchmark)&&(i<j)){
i++;
}
if(i<j){
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
if(i>left){
int temp;
temp=a[left];
a[left]=a[i];
a[i]=temp;
}
quickSort(0,i-1);
quickSort(i+1,right);
}
}
递归函数重点:递归边界条件,首次递归描述
void _recursive(int n)
{
if(递归边界条件){
边界描述;
return;
}else{
首次运行描述;
_recursive(n-1);
return:
}
}