只用一次循环就能实现数组的排序,只是效率不是很高,算法很好懂。

/*
* 一次循环选择排序
* Author : Nonkey
* Time   : 2015-08-06
*/
#include <stdio.h>
#define NR(x) (sizeof(x)/sizeof(x[0]))
#define SWAP(type,a,b) {type tmp ;tmp = a ;a = b ;b = tmp ;}

void output(int *a ,int n) ;

int main(void)
{
	int a[] = {2,56,8,4,6,3,46,45} ;
	int i ;

	output(a,NR(a)) ;

	for(i = 0 ;i < NR(a) - 1 ;)
	{
		if(a[i] <= a[i + 1])	i++;
		else
		{
			SWAP(int ,a[i],a[i + 1]) ;
			i = 0 ;
			continue ;
		}

	}
	output(a ,NR(a)) ;

	return 0 ;
}

void output(int *a ,int n)
{
	int i ;
	for(i = 0 ;i < n ;i++)
		printf("%d ",a[i]);
	putchar('\n') ;
}

  仅供大家参考 。