前言:闲来无事,便研究起来对数组的排序算法,怕过后遗忘,特地总结一下,也希望能帮到大家

概要: 

总结的算法:

冒泡排序、插入排序、选择排序

要排序的一列数(从小到大):

1, 5, 3, 83, 46, 55, 16, 87, 28, 66, 8, 33, 47

一、冒泡排序

1.源代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace BubbleSort
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. //定义要排序的数组
  14. int[] iArrary = new int[] { , , , , , , , , , , , , };
  15.  
  16. Program pg = new Program();
  17.  
  18. //给数组排序
  19. pg.Sort(iArrary);
  20.  
  21. //排序后循环输出数组
  22. foreach (int item in iArrary)
  23. {
  24. Console.WriteLine(item);
  25.  
  26. }
  27. //防止控制台一闪而过
  28. Console.ReadLine();
  29.  
  30. }
  31.  
  32. public void Sort(IList<int> data)
  33. {
  34. //从第一个数(i = 0)开始,循环整个数组。
  35. for (int i = ; i < data.Count; i++)
  36. {
  37. //从最后一个数开始,到第(i+1)个数结束,依次比较相邻的两个数,
  38. //如果前一个数大于后一个数,就交换他们两个
  39. //这样,第一个循环下来,第一个数是最小的数
  40. //第二个循环下来,第二个数是第二小的数。。。依次类推
  41. for (int j = data.Count-; j > i; j--)
  42. {
  43. if (data[j - ] > data[j])
  44. {
  45. int temp;
  46. temp = data[j - ];
  47. data[j - ] = data[j];
  48. data[j] = temp;
  49.  
  50. }
  51.  
  52. }
  53. }
  54. }
  55. }
  56. }

2 .运行结果

二、插入排序

1.算法简介

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

2.算法描述

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  • <1>.从第一个元素开始,该元素可以认为已经被排序;
  • <2>.取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • <3>.如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • <4>.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • <5>.将新元素插入到该位置后;
  • <6>.重复步骤2~5。

3.源代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApplication3
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. int[] iArrary = new int[] { , , , , , , , , , , , , , };
  14.  
  15. Program pg = new Program();
  16.  
  17. pg.InsrtSort(iArrary);
  18.  
  19. foreach (int item in iArrary)
  20. {
  21. Console.WriteLine(item);
  22.  
  23. }
  24. Console.ReadLine();
  25.  
  26. }
  27.  
  28. //插入排序
  29. public void InsrtSort(IList<int> data)
  30. {
  31. // int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
  32. int temp;
  33.  
  34. for (int i = ; i < data.Count; i++)
  35. {
  36. temp = data[i];//要与已排序数组比较的新元素
  37.  
  38. //从0到j,代表的是已排序的数
  39. for (int j = i - ; j >= ; j--)
  40. {
  41.  
  42. if (data[j] > temp)//新元素小于该元素(已排序),将该元素移到下一位置
  43. {
  44. data[j + ] = data[j];
  45. //data[j] = temp;
  46. if (j == )//因为取不到 j==0 的值,故在此做特殊处理
  47. {
  48. data[] = temp;//只有当第二个数小于第一个数的时候,才会执行该处代码
  49. }
  50. }
  51. else//否则,将新元素移到下一位置
  52. {
  53. data[j + ] = temp;
  54. break;//跳出里面的循环
  55.  
  56. }
  57.  
  58. }
  59. }
  60.  
  61. }
  62.  
  63. }
  64. }

4.运行结果

三. 选择排序

1.思路

首先,在未排序序列中,找到最小元素,存放到排序序列的起始位置。

然后,再从剩余未排序元素中,继续寻找最小元素,然后放到已排序序列的末尾。

以此类推,直到所有元素排序完毕。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace SelectionSort
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13.  
  14. int[] iArrary = new int[] { , , , , , , , , , , , , };
  15.  
  16. Program pg = new Program();
  17.  
  18. pg.Sort(iArrary);
  19.  
  20. foreach (int item in iArrary)
  21. {
  22. Console.WriteLine(item);
  23.  
  24. }
  25. Console.ReadLine();
  26.  
  27. }
  28. public void Sort(IList<int> data)
  29. {
  30. // int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
  31. for (int i = ; i < data.Count - ; i++)
  32. {
  33. //在未排序序列中,总是默认为第一个值,为最小值;min 与temp都是过来跑龙套的
  34. int min = i;//最小值的序号
  35. int temp = data[i];//最小值
  36.  
  37. //找到剩余未排序元素的最小值
  38. for (int j = i+; j < data.Count; j++)
  39. {
  40. if (data[j] < temp)//剩余未排序元素中,存在某元素数小于最小值
  41. {
  42. min = j;
  43. temp = data[j];//将该元素的值认为是最小值
  44. }
  45.  
  46. }
  47.  
  48. if (min != i)//
  49. {
  50. int t = data[min];
  51. data[min] = data[i];
  52. data[i] = t;//将找到的最小值放入已排序序列的末尾
  53.  
  54. }
  55.  
  56. }
  57.  
  58. }
  59.  
  60. }
  61. }

3.运行结果

c#(控制台应用程序)实现排序算法的研究总结的更多相关文章

  1. JAVA 基础编程练习题28 【程序 28 排序算法】

    28 [程序 28 排序算法] 题目:对 10 个数进行排序 程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即 用第二个元素与后 8 个进行比较,并进 ...

  2. Java50道经典习题-程序28 排序算法

    题目:对10个数进行排序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换. public class Prog28 { ...

  3. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  4. java小程序整理及排序算法

    1. 利用循环打印如下图形 ***** **** *** ** * public class Main { public static void main(String[] args) { // TO ...

  5. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  6. 算法课上机实验(一个简单的GUI排序算法比较程序)

    (在家里的电脑上Linux Deepin截的图,屏幕大一点的话,deepin用着还挺不错的说) 这个应该是大二的算法课程上机实验时做的一个小程序,也是我的第一个GUI小程序,实现什么的都记不清了,只记 ...

  7. 各种排序算法及其java程序实现

    各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想 ...

  8. 排序算法--希尔排序(Shell Sort)_C#程序实现

    排序算法--希尔排序(Shell Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困难 ...

  9. 排序算法--插入排序(Insertion Sort)_C#程序实现

    排序算法--插入排序(Insertion Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

随机推荐

  1. phpmailer发送邮件服务

    获取开源的phpmail类 开启stmp服务登录126/163邮箱 ->设置->POPS/SMTP/IMAP(开启需要的服务,并点击保存,初次使用会要求设置一个授权码) 测试 <?p ...

  2. Django----模板层

    一.模板层:           python的模板:HTML代码+模板语法      模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. import datetime t=dateti ...

  3. win7 重装 docker 启动后无法启动错误解决

    描述 win7 重新安装Docker 后启动  Docker Quickstart Terminal 出现如下错误 Starting "default"... (default) ...

  4. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  5. BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]

    题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...

  6. BZOJ 3787: Gty的文艺妹子序列 [分块 树状数组!]

    传送门 题意:单点修改,询问区间内逆序对数,强制在线 看到加了!就说明花了不少时间.... 如果和上题一样预处理信息,用$f[i][j]$表示块i到j的逆序对数 强行修改的话,每个修改最多会修改$(\ ...

  7. Job 失败了怎么办?- 每天5分钟玩转 Docker 容器技术(133)

    上一节讨论了 Job 执行成功的情况,如果失败了会怎么样呢? 修改 myjob.yml,故意引入一个错误: 先删除之前的 Job: 如果将 restartPolicy 设置为 OnFailure 会怎 ...

  8. 聊聊Vue.js的template编译

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:https://github.com/a ...

  9. 日程管理 FullCalendar

    日程管理,采用著名组件FullCalendar日历插件实现FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发1.实现按 ...

  10. Django——ContentType及ContentType-signals的使用

    一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...