排序总结

选择法排序

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]);
	}
}

赞赏