第二次遍历,找出下一个最大的值。遍历n-1次排序n个项,最终项必须在n-1次遍历之后。
接下来呢,我们直接进行把最小值放到已排序序列末尾的 *** 作。当然这是第一轮循环,还没有产生已排序的序列。0就是已排序序列的开头数字了。
第二轮初始化开始,我们继续选取假设的最小值,这次,我们还是选取第一个数字作为假设的最小值,需要注意的是,0已经是已排序序列,我们要从未排序的序列中选取第一个数字,也就是(5、1、8、6、2、3、4、9、7)无序序列中的数字5。
#include<stdio.h>
int main()
{int i,j,t,n,a[100]
printf("请输入有几个整数(<=100):du")
scanf("%d",&n)
printf("请输入这%d个整数:zhi\n")
for(i=0i<ni++)
scanf("%d",&a[i])
for(i=0i<n-1i++)
{k=i
for(j=i+1j<nj++)
if(a[j]<a[k])
k=j
t=a[i]a[i]=a[k]a[k]=t
}
printf("排序以后的数:\n")
for(i=0i<ni++)
printf("%d ",a[i])
printf("\n")
return 0
}
扩展资料:
在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。
最坏情况下,即待排序记录初始状态是按第一条记录最小,之后的记录从小到大顺序排列,则需要移动记录的次数最多为3(n-1)。
简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较 *** 作的时间复杂度为O(n^2),进行移动 *** 作的时间复杂度为O(n)。
参考资料来源:百度百科-简单选择排序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)