C#选择排序问题

using System;
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[] { 10,8,9,7,5,6 };
SelectionSorter ss = new SelectionSorter();
ss.Sort(iArrary);
for (int m = 0; m < iArrary.Length; m++)
Console.Write("{0} ", iArrary[m]);
Console.WriteLine();
}
}
我是这么考虑的:第一趟i=0的时候,j循环最后输出的min结果是4,那么
t=list[min]=6,list[min]=list[i]=10(i=0),list[i]=6.
第二趟i=1的时候,j循环最后输出的结果依然是min=4,那么t=list[min]=6,list[min]=9,list[i]=6
.....
最后输出的结果是没有排序的10,9,8,7,6...
不明白为什么结果怎么会是排好序的数呢?我的理解错在哪儿了?请高手指教,谢谢!

我是这么考虑的:第一趟i=0的时候,j循环最后输出的min结果是4,那么
t=list[min]=6,list[min]=list[i]=10(i=0),list[i]=6.

min怎么会是4呢?for (int j = i + 1; j < list.Length; j++),第一趟,j的循环范围是从1到5,即min=5,正好是最后一个数,所以最后是拍好序的。

参考资料:http://fujl_2008.blog.163.com

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-01-31
你这是做的一个练习还是实际要应用?

如果要用的话直接用C#提供的Array.Sort()方法就可以排序,也可以加各种参数。
第2个回答  2009-01-31
int[] iArrary = new int[] { 10,8,9,7,5,6 };
什么意思?是定义iArrary数组的元素是10,8,9,7,5,6 它吗?
我回家试试,以后聊!
第3个回答  2009-01-31
见 百度百科 选择排序法

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

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

asp.net C#中四种常用排序法哪个比较快,哪个比较好?
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x]作为基准。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。优点:极快,...

C# list 排序后的顺序能不能在组里保持不变?
按你的要求,选用排序算法时,一定要选用稳定排序,这样关键字相同的记录,在排序后,它们的相对顺序不会变。应该不需要我写代码吧。

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

C# winForm sql,根据选择条目在控件上显示对应信息。重新排序出现错误...
重新排序的时候,selectrows有可能是一项都没有选中,所以当然有可能是空的了,使用之前,你先判断一下 if(dataGridView1.SelectedRows.Count >0)或者你干脆用 currentrow来代替.SelectedRows[0],因为当前行是永远存在的。

请教一下C#中的各种排序原理详细解答
\/\/移动 i--;\/\/查找 } L[i+1]=L[0];\/\/将元素插入 } i=j-1;\/\/还原有序区指针 } } 2.希尔排序 原理:又称增量缩小排序。先将序列按增量划分为元素个数相同的若干组,使用直接插入排序法进行排序,然后不断缩小增量直至为1,最后使用直接插入排序完成排序。 要点:增量的选择以及排序最终以...

在winform 用c# 如何把人名随机排序
方法一、打开Excel表格,光标定位到做为排序依据的成绩列(zf),点击常用工具栏中的“降序排序”按钮。就可以让整个表依“zf”列排序。(不能选中这一列再排序,这样做只能这一列排序,而其它列不动)方法二、1、点击菜单栏“数据”-“排序”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] <...

Java和C#一共有几种排序方法
排序方法一般都就那几种。像冒泡排序,直接插入排序,快速排序,简单选择排序,希尔排序,堆排序。其排序介绍自己看吧。1、冒泡排序属于稳定排序,是一种借助“交换”进行排序的方法。首先要将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录与第三...

相似回答