我是靠谱客的博主 秀丽柠檬,最近开发中收集的这篇文章主要介绍C语言排序算法二C语言常用排序算法之选择排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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语言常用排序算法之选择排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部