天天看点

C#冒泡排序与快速排序与插入排序

冒泡排序

冒泡排序就是比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的比较错综,从开始第一对到结尾的最后一对

/// <summary>
        /// 冒泡排序
        /// </summary>
        /// <param name="arr"></param>
        public static void Bubblesort(int[] arr)
        {
            if (arr.Length==1)
            {
                return;
            }
            for (int i = 0; i < arr.Length-1; i++)
            {
                bool IsSort = true;//判断顺序是否正确,如果顺序没问题直接跳过
                for (int j = i+1; j < arr.Length; j++)
                {
                    if (arr[i]>arr[j])
                    {
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                        IsSort = false;
                    }
                   
                }
                if (IsSort)
                {
                    break;
                }
            }
        }
           

快速排序

从数列中挑出一个元素,当做中间值(key)。排序数列,所有元素比这个值小的放在左边,比这个值大的放在右边。在这个分区退出之后,这个值就在数列的中间位置。即分区操作。然后递归的把所有元素排序。

/// <summary>
        /// 快速排序
        /// </summary>
        /// <param name="arr"></param>
        /// <param name="begin"></param>
        /// <param name="end"></param>
        public static void Quicksort(int[] arr, int begin, int end)
        {
            if (begin>=end)//如果开始位置下标小于结束位置下标
            {
                return;
            }
            int i = begin, j = end;
            int key = arr[begin];//key值设置为开始排序的第一个数
            while (i<j)
            {
                while (i<j && arr[j]>=key)
                {
                    j--;
                }
                arr[i] = arr[j];
                while (i<j && arr[i]<=key)
                {
                    i++;
                }
                arr[j] = arr[i];
            }
            arr[i] = key;
            //递归排序数组左边的元素
            Quicksort(arr,begin,i-1);
            //递归排序数组右边的元素
            Quicksort(arr, i + 1, end);
        }
           

插入排序

实现插入排序主要是先找到一个有序序列,然后将下一个关键字插入上述有序序列,然后再从剩下的关键字中选取下一个插入对象,反复执行直到整个序列有序。

/// <summary>
        /// 插入排序
        /// </summary>
        /// <param name="arr"></param>
        public static void InsertSort(int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                int t = arr[i];
                int j = i;
                while (j > 0 && arr[j - 1] > t)
                {
                    arr[j] = arr[j - 1];//交换顺序
                    --j;
                }
                arr[j] = t;
            }
        }
           

继续阅读