排序算法

Posted Hi,程序員

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法相关的知识,希望对你有一定的参考价值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sort
{
    class Program
    {
        /// <summary>
        /// 排序算法
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            int[] arr = { 0, 5, 7, 6, 2, 9 };
             bubbleSort(arr);
            //quickSort(arr);
            //insertSort(arr);
            foreach (var a in arr)
            {
                Console.Write(a + ",");
            }
            Console.ReadKey();
        }

        /// <summary>
        /// 冒泡排序:比较两个相邻元素的大小
        /// </summary>
        /// <param name="arr"></param>
        public static void bubbleSort(int[] arr)
        {

            for (int i = 0; i < arr.Length; i++)
            {
                for (int j = 1; j < arr.Length - i - 1; j++)
                {
                    if (arr[j] < arr[j - 1])
                    {
                        arr[j] = arr[j] + arr[j - 1];
                        arr[j - 1] = arr[j] - arr[j - 1];
                        arr[j] = arr[j] - arr[j - 1];
                    }
                }
            }
        }

        /// <summary>
        /// 快速排序(选择排序):每趟选一个min值
        /// </summary>
        /// <param name="arr"></param>
        public static void quickSort(int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                int min = i;
                for (int j = i + 1; j < arr.Length; j++)    //每趟都选出一个最小值,所以到i之前的都已经排好序
                {
                    if (arr[min] > arr[j])
                    {
                        min = j;    //内层循环只需要拿到最小值的下标
                    }
                }
                if (arr[i] != arr[min])
                {
                    arr[i] = arr[i] + arr[min];
                    arr[min] = arr[i] - arr[min];
                    arr[i]= arr[i] - arr[min];
                }
            }
        }

        /// <summary>
        /// 直接插入排序:每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。
        /// </summary>
        /// <param name="arr"></param>
        public static void insertSort(int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                for (int j = i; j >0; j--)
                {
                    if (arr[j] < arr[j - 1])
                    {
                        int temp = arr[j];
                        arr[j] = arr[j - 1];
                        arr[j - 1] = temp;
                    }
                }
            }
        }
    }
}

  

以上是关于排序算法的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

快速排序-递归实现

从搜索文档中查找最小片段的算法?

在第6731次释放指针后双重免费或损坏

TimSort算法分析

以下代码片段的算法复杂度