C语言如何用选择法排序任意输入十个数(从大到小、从小到大)?

Python032

C语言如何用选择法排序任意输入十个数(从大到小、从小到大)?,第1张

#include <stdio.h>

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 。还有很多其他排序方法,其中冒泡排序比较费时但是很好写,如果你不是想知其所以然,直接百度冒泡套用一下就行。

如果想系统的学习算法,推荐你读算法导论,就是那本很厚的。讲的很好。