排序

直接插入排序

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

namespace 直接插入排序
{
    class Program
    {
        static void InsertSort(int[] dataArray)
        {
            for (int i = 1; i < dataArray.Length; i++)
            {
                int iValue = dataArray[i];
                bool isInsert = false;
                //拿到i位置的元素, 跟前面所有的元素比较
                //如果发现比i大的,就让它向后移动
                for (int j = i - 1; j >= 0; j--)
                {
                    if (dataArray[j] > iValue)
                    {
                        dataArray[j + 1] = dataArray[j];
                    }
                    else
                    {
                        dataArray[j+1] = iValue;
                        isInsert = true;
                        break;
                    }
                }
                if (isInsert == false)//没插入时
                {
                    dataArray[0] = iValue;
                }
            }
        }

        static void Main(string[] args)
        {
            int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48 };
            InsertSort(data);
            foreach (var item in data)
            {
                Console.Write(item + " ");
            }
        }
    }
}

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

namespace 简单选择排序
{
    class Program
    {
        static void SelectSort(int[] dataArray)
        {
            for (int i = 0; i < dataArray.Length-1; i++)
            {
                int min = dataArray[i];//最小值
                int minIndex = i;//最小值所在索引
                for (int j = i+1; j < dataArray.Length; j++)//找到最小的
                {
                    if (dataArray[j] < min)
                    {
                        min = dataArray[j];
                        minIndex = j;
                    }
                }
                if(minIndex!=i)
                {
                    int temp = dataArray[i];
                    dataArray[i] = dataArray[minIndex];
                    dataArray[minIndex] = temp;
                }
            }
        }
        static void Main(string[] args)
        {
            int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48 };
            SelectSort(data);
            foreach (var item in data)
            {
                Console.Write(item + " ");
            }
        }
    }
}

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

namespace 快速排序
{
    class Program
    {
        static void QuickSort(int[] dataArray,int left,int right)
        {
            if(left<right)
            {
                int x = dataArray[left]; //基准数  把比它小或者等于它的 放在它的左边,然后把比它大的放在它的右边
                int i = left;
                int j = right;//循环的标志位

                while (true && i<j)//当i==j说明我们找到中间位置,这个中间位置就是基准数应该所在的位置
                {
                    //从后往前比较(从右向左比较) 找一个比x小或者等于的数字,放在坑里,坑位于i的位置
                    while (true && i < j)
                    {
                        if (dataArray[j] <= x)
                        {
                            dataArray[i] = dataArray[j];
                            break;
                        }
                        else
                        {
                            j--; //向左移动 到下一个数字,然后做比较
                        }
                    }
                    //从前往后(从左向右)找一个比x大的数字,放在我们的坑里面 现在的坑位于j的位置
                    while (true && i < j)
                    {
                        if (dataArray[i] > x)
                        {
                            dataArray[j] = dataArray[i];
                            break;
                        }
                        else
                        {
                            i++; //向右移动 到下一个数字,然后做比较
                        }
                    }
                }
                //跳出循环 I==J  现在i==j i是中间位置
                dataArray[i] = x; // left--i--right
                QuickSort(dataArray, left, i - 1);
                QuickSort(dataArray, i+1, right);

            }
        }
        static void Main(string[] args)
        {
            int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48 };
            QuickSort(data, 0, data.Length-1);
            foreach (var item in data)
            {
                Console.Write(item + " ");
            }
        }
    }
}

 

posted @ 2017-01-07 22:38  RONGWEIJUN  阅读(128)  评论(0编辑  收藏  举报