C#数组排序问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 15:35:38
using System;
class Myclass
{
public void SortArray(int[] a)
{
int i, j, pos, tmp;
for (i = 0; i < a.Length - 1; i++)
{
for (pos = j = i; j < a.Length; j++)
if (a[pos] > a[j]) pos = j;
//这里是pos的值赋值给j,还是j的值赋值给pos?
if (pos != i)
{
tmp = a[i];
a[i] = a[pos];
a[pos] = tmp;
}
//这里pos和i的值不是一直都相等的吗?
}
}
}
class Test
{
static void Main()
{
Myclass m = new Myclass();
int[] score = { 87, 89, 56, 90, 100, 75, 64, 45, 80, 84 };
m.SortArray(score);
for (int i = 0; i < score.Length; i++)
{
Console.Write("score[{0}

这是个冒泡吧。。
思想很简单 就是设定一个标志i 这个i要从数组的0元素遍历到最后一个元素
每次遍历的时候 都要保证i和前面的数都是有序的
如果遍历到j的时候 j这个元素比j-1小了 那么就交换j和j-1这两个元素 在吧j向前移动并重复上面的动作 直到j比j-1这个元素大了 那么就表示第i个元素以前的元素都是有序的了

比如你可以看这个例子
2 7 4 9
第一次 i=0,可以保证第0个元素本身有序(只有一个元素所以肯定是有序的)
第二次 i=1,可以看到第0到第1个元素是{2 7}也是有序的
第三次 i=2,这个时候 第2个元素小于第1个元素了于是开始调整
--先让j=i也就是j=2,发线第2个元素"4"<第1个元素"7",于是交换4与7,并且j向前移动一位,也就是j=1了
--此时数组变成了 2 4 7 9
--重复检查,j=1的时候,第1个元素>第0个元素了,这个时候就能保证i=2的情况下第0到第2个元素都是有序的,则继续i的遍历
第四次 i=3,可以看到第3个元素>第2个元素,数组为{2 7 4 9}也是有序的

这样整个排序就完成了

可以发现 每个元素都便利了一遍 最坏的情况每个元素都要向前移动n次
因此算法复杂度为O(n^2) 这个排序是比较低效的
高效的排序你可以参考快速排序(QuickSort)或是归并排序(MergaSort)他们的复杂度是O(nlogn)

int [] iArray={1,3,2,5,4};
冒泡排序从小到大
for(int i=0;i<iArray.Length;i++)
{
for(int j=i+1;j<iArray.Length;j++)
{
if(iArray[i]>iArray[j])
{
int iTemp=iArray[i];
iArray[i]=iArray[j