排序(3)选择排序

void selectsort(int *a,int n)
{
    int begin = 0;
    int end = n - 1;
    while (begin < end)
    {
        int maxi = begin;
        int mini = begin;
        for (int i = 0; i <= end; i++)
        {
            if (a[i] > a[maxi])
            {
                maxi = i;
            }
            if (a[i] < a[mini])
            {
                mini = i;
            }
        }
      
  int e = a[mini];
        a[mini] = a[begin];
        a[begin] = e;
 if (begin == maxi)
 {
     maxi = mini;
 }
          int t = a[maxi];
        a[maxi] = a[end];
        a[end] = t;
        begin++;
        end--;
    }
}

思路:先选出最大的和最小的,然后去除这两个数然后再选次之的,以此类推,如果遇到maxi与begin重叠(max没变,但它的值已经交换了,不是最大了),则将mini赋给maxi;

你可能感兴趣的:(数据结构,算法,数据结构)