C#从入门到入土(四)

90 阅读1分钟

12、排序算法

1. 冒泡排序

  • 两两相邻,不停比较,不停交换,比较arr.Length轮。

​​冒泡排序动图

        void bubbleSort(int[] arr)
        {
            int n = arr.Length;
            bool isSorted = false;
            //遍历所有数组元素
            for (int i = 0; i < n - 1; i++)
            {
                isSorted = false;
                //把最大值移动到n-i -1 的位置
                for (int j = 0; j < n-i - 1; j++)  
                {
                    //升序排列
                    if (arr[j] > arr[j+1])
                    {
                        isSorted = true;
                        // 交换值
                        int temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                    //如果没有交换过元素,则已经排好序
                    if (!isSorted)
                    {
                        break;
                    }
                }
            }
        }

2. 选择排序

  • 创建临时变量,依次比较,找出极值,放入目标位置。

选择排序动图

    static void SelectionSort(int[] arr)
    {
        int n = arr.Length;
        //比较n轮
        for (int i = 0; i < n; i++)
        {
            //每轮都默认第一个元素是极值
            int index = 0;
            //依次 从 1 ~ 目标位置 开始比较
            //目标位置为 arr.Length - 1 - 轮数
            for (int j = 1; j < n - i; j++)
            {
                //如果有值比极值大
                if (arr[index] < arr[j])
                {
                    //记录极值的小标
                    index = j;
                }
            }
            //若极值下标与目标位置相同则不交换
            if (index != n - i - 1)
            {
                int temp = arr[index];
                arr[index] = arr[n - m - 1];
                arr[n - m - 1] = temp;
            }
        }
    }