帮我解释一下C#选择排序代码

using System;

namespace SelectionSorter
{
public class SelectionSorter
{
private int min;
public void Sort(int [] list)
{
for(int i=0;i<list.Length-1;i++)
{
min=i;
for(int j=i+1;j<list.Length;j++)
{
if(list[j]<list[min])
min=j;
}
int t=list[min];
list[min]=list[i];
list[i]=t;
}
}
}

public class MainClass
{
public static void Main()
{
int[] iArrary = new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
SelectionSorter ss=new SelectionSorter();
ss.Sort(iArrary);
for (int m=0;m<iArrary.Length;m++)
Console.Write("{0} ",iArrary[m]);
Console.WriteLine();
}
}
}
详细的中文解释

选择排序跟冒泡比较像,但这是选择不是冒泡,楼上搞错了。
详细我真不知道该怎么说。反正就是两个循环体,用一变量记录着外循环的值。
然后进入内循环,把外循环的值作为下标值,把该下标处的值,跟它之后所有值作比较
(也就是j=i+1的原因),值比较小的下标一直用MIN记录着。到内循环结束后,MIN记录的已经是
数组中值最小的所在下标,然后作交换,第一位置的元素就是最小元素,之后外循环指向第二个元素,再进内循环做同样的事,内循环结束后数组中第二元素就是第二小元素了,如此类推,外循环结束后,
排序完成。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-21
public void Sort(int [] list)
{
//外层循环数组
for(int i=0;i<list.Length-1;i++)
{
// 初始第一个值为最小值
min=i;

// 内层循环,从外层循环的数组元素的后一个元素开始
for(int j=i+1;j<list.Length;j++)
{
// 找到最小的那个元素
if(list[j]<list[min])
min=j;
}
// 把最小的元素放到数组的最前面,然后后面的元素继续循环
int t=list[min];
list[min]=list[i];
list[i]=t;
}
}
比如数组:5,6,3,1
外层循环第1次:1,5,6,3 1挪到最前
外层循环第2次:1,3,5,6 3挪到最前
外层循环第3次:1,3,5,6 5挪到第3位(虽然你看着5没动,其实也是用临时变量t进行了交换,只是交换位置是同一处本回答被提问者和网友采纳
第2个回答  2010-10-25
这是一个冒泡排序!你到百度里搜索 冒泡排序 会有很清楚的解释的!希望能的对你有所帮助!

如何用c#实现一个按照升序排列的整数序列?
3.接下来,定义一个自定义函数来比较整数序列中任意两个整数的大小。4.定义一个自定义函数,比较整数序列中任意两个数字的序数大小。5.在主函数中,首先定义两个整数,并保存整数个数和排名计数。6.使用for循环输入序列中的整数,并设置序列中每个整数的序列号。7.按整数大小排序的序列中的所有数值...

如何用c语言实现输入一些数字,按照从大到小排序输出?
用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:include<stdio.h> int main(){ int i,j,a[10],t;printf("输入数");for (i = 0; i < 10; i++)scanf("%d",&a[i]);for (i = 0; i < 10; i++){ for (j = i + 1; j < 10;j...

c#如何对一个打开的excel表格的一个区域的数据,按照某两列的大小进行...
打开表格,全选整个表格,在“数据”选项中选择“排序”,点击“包含标题”,点击“主要关键字”,选择你想按大小进行排序的两列中首先需要的其中一列的代号,然后选择“排序依据”,最后选择“次序”中的“升序”还是“降序”;其次再点“添加条件”重复以上步骤,就达到排序目的了 ...

asp.net C#中四种常用排序法哪个比较快,哪个比较好?
再将a[2]与a[3]~a[n]以相同方法比较一轮,则a[2]的值一定是a[2]~a[n]中最小的。再将a[3]与a[4]~a[n]以相同方法比较一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。优点:稳定,比较次数与冒泡排序一样;缺点:相对之下还是慢。2 插入排序 已知一组升...

用C#编写程序: 定义一个数组;使输入的数由大到小输出! 程序写的简单点...
---选择排序最简单 --- int[] grade = { 58, 89, 74, 15, 23, 85, 100, 14, 59, 98, 75, 12, 45, 65, 84, 96, 74, 16, 33, 94 };int temp;for (int i = 0; i < grade.Length-1 ; i++){ for (int j = i; j < grade.Length ; j++){ if (grade[j] <...

C#选择排序最后一个数字为什么不对
for 循环 loop <= A.Length - 2 i <= A.Length - 1 要 <= 不然最后一个数没有对比。

在winform 用c# 如何把人名随机排序
方法一、打开Excel表格,光标定位到做为排序依据的成绩列(zf),点击常用工具栏中的“降序排序”按钮。就可以让整个表依“zf”列排序。(不能选中这一列再排序,这样做只能这一列排序,而其它列不动)方法二、1、点击菜单栏“数据”-“排序”2、在弹出来的“排序对话框”,选择排序的“主要关键字...

请教一下C#中的各种排序原理详细解答
插入排序 1.直接插入排序 原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。 要点:设立哨兵,作为临时存储和判断数组边界之用。 实现: Void InsertSort(Node L[],int length) { Int i,j;\/\/...

3. 用任意一种编程语言(C\/C++\/Java\/C#\/VB.NET)写出任意一种你所知的...
\/***选择排序***\/ void SelectSort(int a[], int first, int last){ \/\/实现对数组a[]中a[first]到a[last]升序的“选择”排序 int i, j, temp, num;for(i=first; i<last; i++){ num = i;for(j=i+1; j<=last; j++){ if(a[j] < a[num]){ num = j;} } if(i !

遗传算法C#的源代码,最好关于排序的
(4)采用轮盘选择原理实现,并将个体复制到配对库,以备配对繁殖;score=function(fatherrand,d);sumscore=eumsum(gen);rfitness(gen)=score/sumscore;cfitness(gen)=cfitness(geni_0+rfitness(gen);r-randomoin【0,oiliness(1ast)];ifcfitness(gen)>r choose(individual);(5)按照一定的...

相似回答