选择法排序
void sort(int b[],int n)
{
int i,j,k,temp;
for(i=0;i<=n-2;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(b[k]<=b[j]) k=j;
}
if(i!=k)
{
temp = b[i];
b[i] = b[k];
b[k] = temp;
}
}
}
冒泡法排序
void sort(int a[],int n)
{
int i,j,temp;
for(i=0;i<=n-2;i++)
{
for(j=0;j<=n-2-i;j++)
{
if(a[j]<=a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
插入法排序
void insort(int a[],int length)
{
int i,j,temp;
for(i=1;i<length;i++)
{
for(j=i-1;j>=0&a[j]>a[j+1];j--)
{
temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
高级排序
void sequence(int array[],int left,int right)
{
int i,j,k;
i = left;
j = right;
int temp,pivot;
pivot = array[(left+right)/2]; //中间的那个数
while(i<j) //将中值左右的值与中值做比较
{
while(array[i] < pivot)
{
i++;
}
while(array[j] > pivot)
{
j--;
}
if(i<=j) //若左边大于中间,右边小于中间,则左右交换
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
if(j>left) //递归,说白了就是左右两边在像之前那样,一分为二在比较,然后交换
{
sequence(array,left,j);
}
if(i<right)
{
sequence(array,i,right);
}
}
实现排序的总代码
#define N 30
void sort(int b[],int n)
{
int i,j,k,temp;
for(i=0;i<=n-2;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(b[k]<=b[j]) k=j;
}
if(i!=k)
{
temp = b[i];
b[i] = b[k];
b[k] = temp;
}
}
}
void main()
{
int num;
int i=0;
int arr[N];
while(1){ //可以实现一次性输入
scanf("%d",&num);
char c=getchar();
arr[i++]=num;
if(c=='\n'){
break;
}
}
sort(arr,N);
for(i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
}