选择排序
static void Main(string[] args)
{
    int[] datas = new int[100000];
    Random r = new Random();
    for (int i = 0; i < 100000; i++) {
        datas[i] = r.Next(1, 10000);
    }

    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();
    int[] newdatas = SortChoice(datas);
    stopwatch.Stop();
    foreach (int data in newdatas) {
        Console.WriteLine(data);
    }

    Console.WriteLine("用时:" + stopwatch.ElapsedMilliseconds);
    Console.ReadKey();
}

static int[] SortChoice(int[] datas)
{
    int length = datas.Length;
    int[] newArr = new int[datas.Length];
    for (int x = 0; x < length; x++)
    {
        newArr[x] = datas[x];
    }

    int index = 0;
    for (int i = 0; i < length; i++)
    {
        index = i;
        for (int j = i + 1; j < length; j++)
        {
            if (newArr[j] < newArr[index])
            {
                index = j;
            }
        }

        if (index != i) {
            int temp = newArr[i];
            newArr[i] = newArr[index];
            newArr[index] = temp;
        }
    }
    return newArr;
}

原理其实跟冒泡排序是一样的,不同的是,选择排序减少了交换的次数,可以看出,代码中发现了更小的元素时,不是选择交换合适选择记录下来,最后的时候才判断需要需要交换再进行交换。

因为少了交换的步骤,效率会比冒泡排序的要快。

模拟排序10W条随机数据用时:16886ms


首页 我的博客
粤ICP备17103704号