常用的20种经典算法及其应用

1、冒泡排序

技术要点:这个过程很简单,就是首先将第一条记录的关键字和第二个关键字进行比较,要是为逆序,则将数据交换,然后就是第二个和第三个,以此类推。直至第N-1个记录和N个记录的关键字进行过比较为止。

  static void Main(string[] args)
        {
            //冒泡排序
            BubbleSorter b = new BubbleSorter();
            int[] list = {2,55,44,21,35,62,22,41,14,28,95,100 };
            b.Sort(list);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();

        }

建立的BubbleSorter类

   public class BubbleSorter
    {
       public void Sort(int[] list)
       {
           int i, j, temp;
           bool done = false;
           j = 1;
           while ((j<list.Length)&&(!done))
           {
               done = true;
               for (i = 0; i < list.Length-j; i++)
               {
                   if (list[i]>list[i+1])
                   {
                       done = false;
                       temp=list[i];
                       list[i]=list[i+1];
                       list[i + 1] = temp;
                   }
               }
               j++;

           }

       }
    }

效果如下:

2、选择排序

技术要点:这个选择排序的主要操作就是关键字之间的比较,很显然是从N个数据中进行简单的排序,就是从1至N-1,进行N-1趟选择操作。

 static void Main(string[] args)
        {
            //选择排序
            SelectionSorter s = new SelectionSorter();
            int[] list = { 2, 55, 44, 21, 35, 62, 22, 41, 14, 28, 95, 100 };
            s.Sort(list);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

建立的SelectionSorter类

   public class SelectionSorter
    {
       private int min;
       public void Sort(int[]list)
       {
           for (int i = 0; i < list.Length-1; i++)//遍历数组中的数据,不包含最后一个。
           {
               min = i;//读取当前的数据。
               for (int j = i+1; j < list.Length; j++)//遍历当前数据以后的数据。
               {
                   if (list[j]<list[min])//判断当前的值,如果是最小值,那么把它放到想应得位置。
                   {
                       min = j;
                   }
               }
               int t=list[min];
               list[min]=list[i];//交换数据。
               list[i] = t;
           }
       }
    }

效果如下:

3、插入排序

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

class Program
    {
        static void Main(string[] args)
        {
            InsertionSorter i = new InsertionSorter();
            int[] list = { 54,12,11,41,25,36,5,74,54,100};
            i.Sort(list);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }

建立的InsertionSorter类

   public class InsertionSorter
    {
       public void Sort(int[]list)
       {
           for (int i = 1; i < list.Length; i++)//遍历当前数据,不包含第一个和最后一个。
           {
               int t=list[i];//获取当前值。
               int j = i;//记录当前值得标记。
               while ((j>0)&&(list[j-1]>t))//插入。
               {
                   list[j]=list[j-1];//交换顺序。
                   --j;
               }
               list[j] = t;
           }
       }
    }

效果如下:

4、希尔排序

技术要点:先将整个待排序记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录‘基本有序’时再对全体记录进行一次直接插入排序。特点是:子序列的构成不是简单的‘逐段分割’,而是将相隔某个‘增量’的记录组成一个子序列。

 class Program
    {//希尔排序算法
        static void Main(string[] args)
        {
            ShellSorter s = new ShellSorter();
            int[] list = { 12,45,84,21,5,36,26,56,95,41,20};
            s.Sort(list);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }

建立的ShellSorter类

    public class ShellSorter
    {
        public void Sort(int[] list)
        {
            int inc;
            for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;//遍历当前数组。
            for (; inc > 0; inc /= 3)//遍历当前值。
            {
                for (int i = inc+1; i <=list.Length; i+=inc)
                {
                    int t=list[i-1];
                    int j = i;//获取值。
                    while ((j>inc)&&(list[j-inc-1]>t))//希尔排序。
                    {
                        list[j-1]=list[j-inc-1];//交换数据。
                        j -= inc;
                    }
                    list[j-1]=t;
                }
            }

        }
    }

效果如下:

时间: 2024-10-15 06:17:23

常用的20种经典算法及其应用的相关文章

保持生活斗志的20种经典方法

引导语:很多时候,我们决定要做去一件事情时,不是半途而废就是三分钟热度,很多年轻人都意识到自己三分钟热度的状态而无法改变,最终也大部分一事无成,保持生活斗志的20种经典方法,让你的三分钟热度沸腾. 1.离开舒适区:不断寻求挑战激励自己.提防自己,不要躺倒在舒适区.舒适区只是避风港,不是安乐窝.它只是你心中准备迎接下次挑战之前刻意放松自己和恢复元气的地方. 2.把握好情绪:人开心的时候,体内就会发生奇妙的变化,从而获得阵阵新的动力和力量.但是,不要总想在自身之外寻开心.令你开心的事不在别处,就在你

【经典算法大全】收集51种经典算法 初学者必备

<经典算法大全>是一款IOS平台的应用.里面收录了51种常用算法,都是一些基础问题.博主觊觎了好久,可悲哀的是博主没有苹果,所以从网上下了老奔的整理版并且每个都手敲了一遍. 虽然网上也有博客贴了出来,但是自己写写感觉总是好的.现在分享个大家. 代码和运行结果难免有出错的地方,请大家多多包涵. 1.河内之塔(汉诺塔) 2.费式数列 3.巴斯卡三角形 4.三色棋 5.老鼠走迷宫(1) 6.老鼠走迷宫(2) 7.骑士走棋盘 8.八皇后 9.八枚银币 10.生命游戏 11.字串核对 12.双色河内塔,

对比几种在ROS中常用的几种SLAM算法

在此因为要总结写一个文档,所以查阅资料,将总结的内容记录下来,欢迎大家指正! 文章将介绍使用的基于机器人操作系统(ROS)框架工作的SLAM算法. 在ROS中提供的五种基于2D激光的SLAM算法分别是:HectorSLAM,Gmapping,KartoSLAM,CoreSLAM和LagoSLAM.当然最后还有比较经典的google开源的cartographer,虽然不是基于ROS的但是大牛们已经将它修改为基于ROS的版本的cartographer_ros, ROS(Robot Operating

学习Java绝对要懂的,Java编程中最常用的几种排序算法!

今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来!     ,群里有免费的学习视频和项目给大家练手.大神有空时也会带带大家的,学Java的过程中一定要多问多记,不要怕问题,要去主动的解决问题. 冒泡排序 选择排序 插入排序 归并排序 例如:降序排{10,5,9,6}分为{10,5},{9,6}然后{5,10},{6,9}然后完成 快速排序 就最后一个快速排序可能大家看不太懂,我就举个例子吧 开始输入以下数组

JavaScript中常用的4种排序算法

冒泡排序 冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习. 算法介绍:比较相邻的两个元素,如果前一个比后一个大,则交换位置.第一轮把最大的元素放到了最后面.由于每次排序最后一个都是最大的,所以之后按照步骤1排序最后一个元素不用比较. 冒泡算法改进:设置一个标志,如果这一趟发生了交换,则为true.否则为false.如果这一趟没有发生交换,则说明排序已经完成.代码如下: 假如数组长度是20,如果只有前十位是无序排列的,后十位是

Java的数组的几种经典算法

Java中与数组相关的算法,常用的有:冒泡排序.选择排序.和反转排序. [冒泡排序] 基本思想 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有必要交换为止,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端,故名之. 算法分析 冒泡排序总的平均时间复杂度为 ,所以其速度相对较慢! 具体实现 输出结果

一遍记住Java常用的八种排序算法与代码实现

1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直到最后一个数,重复第二步. 如何写写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入. 设定插入数和得到已经排好序列的最后一个数的位数.insertNum和j=i-1. 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动

常用的四种排序算法

#include <stdio.h> void BubbleSort(int a[], int size, int order); void SelectSort(int a[], int size, int order); void InsertSort(int a[], int size, int order); void QuickSort(int a[], int size, int order); int main() { int a[5]={5,3,4,2,1}; int i; /

Java常用的八种排序算法与代码实现

1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序 1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直到最后一个数,重复第二步. 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入. 设定插入数和得到已经排好序列的最