程序开发 > C# > 正文

选择排序算法(顺序、倒序)

亮术网 2020-07-04 本网原创

如果只对数组的部分元素排序(如只排出前面100名),选择排序算法就是不错的选择,它每循环(外循环)一次都把最小(或最大)的元素放到已排好序的元素后面。假如只排出数值最大的前100名,外循环只需循环100次即可,可提高程序运行效率。

 

一、选择排序算法的基本思想

选择排序每次循环(外循环)选出最小(或最大)的元素放到已排好序的元素后面,直到排完所有元素。

每次外循环开始,以待排序数组(或 List列表)的第一个元素作为基准,通过内循环进行比较,如果第一个元素大于后面的元素(if (arr[j] < arr[index])),则把后面的元素索引记下(index = j);内循环结束后,如果最小的元素不是待排序数组的第一个元素(if (index !=i)),则进行交换。

 

 

二、C#选择排序算法(顺序)

/// <summary>
  /// 选择排序
  /// </summary>
  /// <param name="arr">待排序数组</param>

  private void SelectSort(int[] arr)
  {
    int len = arr.Length;
    int temp,index;
    for (int i = 0; i < len; i++)
    {
      index = i;
      for (int j = i + 1; j < len; j++)
      {
        if (arr[j] < arr[index])
        index = j;
      }

    if (index != i)
      {
        temp = arr[i];
        arr[i] = arr[index];
        arr[index] = temp;
      }
    }
  }

 

调用方法:

int[] a = new int[] { 6, 2, 91, 38, 10, 45, 178, 27 };
  SelectSort(a);

foreach (int n in a)
  label.Text += n.ToString() + " ";

输出结果:2 6 10 27 38 45 91 178(测试通过)

 

 

 

三、C#选择排序算法(倒序)

写好了顺序排序,也就等于写好了倒序排序,因为排序代码完全一样,只需把 if (arr[j] < arr[index]) 中的 < 改为 > 即可,代码如下:

/// <summary>
  /// 选择排序
  /// </summary>
  /// <param name="arr">待排序数组</param>

  private void SelectSort(int[] arr)
  {
    int len = arr.Length;
    int temp,index;
    for (int i = 0; i < len; i++)
    {
      index = i;
      for (int j = i + 1; j < len; j++)
      {
        if (arr[j] > arr[index])
        index = j;
      }

    if (index != i)
      {
        temp = arr[i];
        arr[i] = arr[index];
        arr[index] = temp;
      }
    }
  }

 

调用方法:

int[] a = new int[] { 6, 2, 91, 38, 10, 45, 178, 27 };
  SelectSort(a);

foreach (int n in a)
  label.Text += n.ToString() + " ";

输出结果:178 91 45 38 27 10 6 2 (测试通过)

 

 

 

四、C语言选择排序算法(顺序)

#include <stdio.h>
  #include <stdlib.h>

/* arr 待排序数组,len 数组长度*/
  void SelectSort(int* arr, int len)
  {
    int temp,index;
    for (int i = 0; i < len; i++)
    {
      index = i;
      for (int j = i + 1; j < len; j++)
      {
        if (arr[j] < arr[index])
        index = j;
      }

    if (index != i)
      {
        temp = arr[i];
        arr[i] = arr[index];
        arr[index] = temp;
      }
    }
  }

void main ()
  {
    int a[8] = {6, 2, 91, 38, 10, 45, 178, 27};
    SelectSort(a, 8);

    int i;
    for (i = 0; i < 8; i++)
      printf("%d ", a[i]);
    printf("\n");
  }

输出结果:2 6 10 27 38 45 91 178

 

 

 

五、C语言选择排序算法(倒序)

倒序只需把 if (arr[j] < arr[index]) 中的 < 改为 > 即可,代码如下:

#include <stdio.h>
  #include <stdlib.h>

/* arr 待排序数组,len 数组长度*/
  void SelectSort(int* arr, int len)
  {
    int temp,index;
    for (int i = 0; i < len; i++)
    {
      index = i;
      for (int j = i + 1; j < len; j++)
      {
        if (arr[j] > arr[index])
        index = j;
      }

    if (index != i)
      {
      temp = arr[i];
      arr[i] = arr[index];
      arr[index] = temp;
      }
    }
  }

void main ()
  {
    int a[8] = {6, 2, 91, 38, 10, 45, 178, 27};
    SelectSort(a, 8);

    int i;
    for (i = 0; i < 8; i++)
      printf("%d ", a[i]);
    printf("\n");
  }

输出结果:178 91 45 38 27 10 6 2

本文浓缩标签:排序算法