算法导论 每日一算
顺序排序#include <stdio.h>
void sort(int arg[],int n)
{
int i,p,m,j;
for(i=0;i<n;i++){
p=arg[i];
for(j=i+1;j<n;j++){
if(p>=arg[j]){
m=p;
p=arg[j];
arg[j]=m;
}
arg[i]=p;
}
}
}
int main(int argc, char *argv[])
{
int num[20],i=0,j;
printf("please insert num insert q to quit\n");
while(scanf("%d",num+i)==1){
i++;
}
sort(num,i);
for(j=0;j<i;j++)
printf("%d ",num[j]);
printf("done\n");
return 0;
}
另一个变体
#include <stdio.h>
void sort(int arg[],int n)
{
int i,p,j;
for(i=0;i<n;i++){
p=arg[i];
for(j=i+1;j<n;j++){
if(p>=arg[j]){
p^=arg[j];
arg[j]^=p;
p=arg[j]^p;
}
arg[i]=p;
}
}
}
int main(int argc, char *argv[])
{
int num[20],i=0,j;
printf("please insert num insert q to quit\n");
while(scanf("%d",num+i)==1){
i++;
}
sort(num,i);
for(j=0;j<i;j++)
printf("%d ",num[j]);
printf("done\n");
return 0;
}
针对已经排序好的插入算法
#include <stdio.h>
void sort(int arg[],int n,int m)
{
int i;
if(m>=arg[n])
arg[n+1]=m;
else{
for(i=0;i<=n;i++){
if(m<arg[i])
break;
}
for(;n>=i;n--){
arg[n+1]=arg[n];
}
arg[i]=m;
}
}
int main(int argc, char *argv[])
{
int num[20],i=0,j;
printf("please insert num insert q to quit\n");
while(scanf("%d",num+i)==1){
sort(num,i-1,num[i]);
i++;
}
for(j=0;j<i;j++)
printf("%d ",num[j]);
printf("done\n");
return 0;
}