main(void)
{
int i,j,a[10],p=0,t=0,temp
printf("请输入原数组:\n")
for(j=0j<10j++)
scanf("%d",&a[j])
temp=a[0]
for(j=0j<9j++)
{
t=j
temp=a[j]
for(i=j+1i<10i++)
if(temp>a[i]) //这是由小到大排序 如果是大到小则改为 if(temp<a[i])
{temp=a[i]p=i}
{temp=a[p]a[p]=a[t]a[t]=temp}
}
printf("排序后的数组为:\n")
for(j=0j<10j++)
printf("%d ",a[j])
}
给你提供几个比较简单的算法思路。
首先纠正一下,你要排序的对象不要存在单个变量里,要存在数组里,这样才能用循环的方式取用。
插入排序
如果你打过牌,这种排序你就一定能理解。从未排序的部分取出一个元素来,然后插入到已经排好序的部分。就这样一个一个的查入。
2.选择排序
从未排序的部分选出最大(最小)的一个放在已排好序的部分的最后。然后重复此步骤。
3.归并排序
排一个很长的序列可能比较麻烦,我就把他们分成两份,把他们分别排好,然后再把他们接起来,接起来就很简单了。而这两个怎么排呢,我再把他们分别分成两个……这就要用到递归了。
总结一下,前两个时间复杂度是平方,后一个是n*logn 。还有很多其他排序方法,其中冒泡排序比较费时但是很好写,如果你不是想知其所以然,直接百度冒泡套用一下就行。
如果想系统的学习算法,推荐你读算法导论,就是那本很厚的。讲的很好。