选择排序算法(顺序、倒序)
如果只对数组的部分元素排序(如只排出前面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