• 排序


    直接插入排序

    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 + " ");
                }
            }
        }
    }
  • 相关阅读:
    Linux常用命令及详细说明 — 结合工作(侧重性能监控,包括CPU、内存、IO、网络、磁盘等)
    navicat连接不上Linux服务器上的mysql的解决办法
    Git之rebase、merge和cherry pick的区别详解—面试常问
    阿里《JAVA实习生入职测试题—2019最新》之答案详解(连载一)
    技术语言框架学习方法论
    阿里《JAVA实习生入职测试题—2019最新》之答案详解(连载二)
    C# 文件/文件夹一般操作(File、Directory)
    Log4Net 使用及组合公共类
    VmWare 15 设置Centos7 共享文件夹及问题记录
    Centos 7 使用(Service iptables stop/start)关闭/打开防火墙 Failed to stop iptables.service: Unit iptables.service not loaded.
  • 原文地址:https://www.cnblogs.com/rongweijun/p/6260570.html
Copyright © 2020-2023  润新知