概述
C语言常用排序算法之选择排序
选择排序算法
#include<stdio.h>
#define SIZE 10
void SelectionSort(int *a,int len){
int i,j,k,temp,h;
for(i=0;i<len-1;i++){
k=i;
for(j=i+1;j<len;j++){
if(a[j]<a[k])
k=j;
}
if(k!=i){
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
printf("第%d步排序结果:",i+1);
for(h=0;h<len;h++) {
printf("%d ",a[h]);}
printf("n");
}
}
int main()
{
int i;
int b[SIZE];
for(i=0;i<SIZE;i++)
{
scanf("%d",&b[i]);
}
SelectionSort(b,SIZE);
printf("排序后:n");
for(i=0;i<SIZE;i++)
{
printf("%d ",b[i]);
}
printf("n");
return 0;
}
改进的选择排序
说明:为了减少比较的次数,可采用每一趟扫描时,同时选出最大和最小值,这样逐步缩小扫描范围,直到只剩下一个元素。
改进版本中有一点要注意:如果最大值在最左边,肯定要被移走,此时要转移到相应的新位置。
选择排序基础改进代码如下:
#include<stdio.h>
void SelectSort(int vec[], int n) //选择排序改进算法:同时选出最大和最小值
{
int i, min, max, left, right;
int temp;
for (left=0, right=n-1; left<right; left++, right--)
{
min = left;
max = right;
for (i=left; i<=right; i++)
{
if (vec[i] < vec[min])
{
min = i;
}
else if (vec[i] > vec[max])
{
max = i;
}
}
if (min != left)
{
temp = vec[left];
vec[left] = vec[min];
vec[min] = temp;
if (max == left) //如果最大值在最左边,肯定要被移走,此时要转移到相应的新位置
{
max = min;
}
}
if (max != right)
{
temp = vec[right];
vec[right] = vec[max];
vec[max] = temp;
}
}
}
int main()
{
int i;
int b[10];
for(i=0;i<10;i++)
{
scanf("%d",&b[i]);
}
SelectSort(b,10);
for(i=0;i<10;i++){
printf("%d ",b[i]);}
return 0;
}
最后
以上就是秀丽柠檬为你收集整理的C语言排序算法二C语言常用排序算法之选择排序的全部内容,希望文章能够帮你解决C语言排序算法二C语言常用排序算法之选择排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复