C语言中的选择排序法是什么?

Python018

C语言中的选择排序法是什么?,第1张

选择排序(Selection sort)是一种简单直观的排序算法。工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

以下是一个实现选择排序的例子:

#define SWAP(x, y, t)  ((t) = (x), (x) = (y), (y) = (t))

 //将list中的n个数据,通过选择排序算法排序。

void selete_sort(int list[], int n)

{

    int i, j, min, temp

    for (i = 0 i < n - 1 i++){

        min = i

        for (j = i + 1 j < n j++)//找出最小元素的下标。

            if (list[j] < list[min])

                min = j

        SWAP(list[i], list[min], temp)//交换最小元素到当前起始位置。

    }

}

#include<stdio.h>

int main()

{ int a[6],max,min,i,j,ma,mi,t,mid

for(i=0i<6i++)

{ scanf("%d",&a[i])

}

for(i=0i<3i++)

{ min=a[i]

  max=a[i]

  for(j=i,mi=i,ma=ij<6-ij++)

  { if(a[j]<min)

    { min=a[j]

      mi=j

    }

    if(a[j]>max)

    { max=a[j]

      ma=j

    }

  }

  t=a[i]

  a[i]=a[mi]

  a[mi]=t

  if(ma==i)ma=mi //增加了这一行

  mid=a[5-i]

  a[5-i]=a[ma]

  a[ma]=mid

}

for(i=0i<6i++)

{ printf("%d",a[i])

  printf(" ")

}

return 0

}

这是选择排序。先用a[0]与a[1]比较,当a[0]<a[1]时并不交换,而用k记下来现在a[0]最小……这样一趟比较完后a[k]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了吗?注意:t=array[k]array[k]=array[i]array[i]=t不是for(j=i+1j<nj++)的循环体,要等它循环完了后才执行一次。