选择排序算法(顺序、倒序)
如果只对数组的部分元素排序(如只排出前面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
-
相关阅读
- Hashtable排序的几种方法(C#)
- Excel排序的11个实例,含多条件、按单元格与字体颜色
- Excel分类汇总怎么用的6个操作,含两个字段汇总与汇总
- javascript 多维数组定义、添加、删除和排序元素(js
- 快速排序算法(顺序、倒序)
- js数组操作大全(带实例),含隐性定义、三种添加和删
- 2.23 Word 2016 段落排序
- Excel HLookUp函数的使用方法,包含首行需排序、返回
- Excel Rank函数怎么用的11个实例,含与Rank.EQ和Ra
- C#文件和文件文件夹按时间、名称排序-顺序与倒序
- 按文件名排序隐藏陷井、注意问题(序号文件名)
- 3.19 Word2016 表格数据排序(单列与
