关于冒泡排序,选择排序,插入排序,希尔排序[资料收集]  以下资料来源与网络

冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到了第一个位置上(或最后位置),之后不考虑选出的元素,对剩余的元素进行循环的排列。

举一个例子:我们在火车站买票有军人、记者、两会代表优先的原则,大家排队买票,这时来了一个两会代表买票,他从后往前问买票的人是否是军人、记者、两会代表,如果不是就和普通老百姓交换位置

        /// <summary>
/// 冒泡排序[顺序]
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static string BubbleSorterOrderByAsc(int[] list)
{
int i, j, temp;
bool done = false; j = ;
while ((j < list.Length) && (!done))
{
done = true;
for (i = ; i < list.Length - j; i++)
{
if (list[i] > list[i + ])
{
done = false;
temp = list[i];
list[i] = list[i + ];
list[i + ] = temp;
}
}
j++;
}
string retstr = "冒泡排序[顺序]<br/>";
for (i = ; i < list.Length; i++)
{
retstr += list[i]+"<br/>"; }
return retstr;
}
/// <summary>
/// 冒泡排序[倒序]
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static string BubbleSorterOrderByDesc(int[] list)
{
int i, j, temp;
bool done = false; j = ;
while ((j < list.Length) && (!done))
{
done = true;
for (i = ; i < list.Length - j; i++)
{
if (list[i] < list[i + ])
{
done = false;
temp = list[i];
list[i] = list[i + ];
list[i + ] = temp;
}
}
j++;
}
string retstr = "冒泡排序[倒序]<br/>";
for (i = ; i < list.Length; i++)
{
retstr += list[i] + "<br/>"; }
return retstr;
}

选择排序:

简单选择排序:每次对剩余的数据中选择最小的和剩余的这些数据中的第一个进行交换。

举一个例子:毕业了,大家都在照毕业照,大家站在那里参差不齐,照相师傅一看,这可不行啊,瞅了一眼一下看到了最高的,好了,你就站到第一个,接着瞅剩下最高的,站第二个……最后就成了一个由高到低的队列

/// <summary>
/// 选择排序
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static string SelectionSorter(int[] list)
{
int min;
for (int i = ; i < list.Length - ; i++)
{
min = i;
for (int j = i + ; j < list.Length;j++)
{
if (list[j] < list[min])
min = j;
}
int t = list[min];
list[min] = list[i];
list[i] = t;
}
string retstr = "选择排序<br/>";
for (int i = ; i < list.Length; i++)
{
retstr += list[i] + "<br/>"; }
return retstr;
}

插入排序:直接插入排序:插入到已经排好序的数列中的一个数据。

举一个形象的例子:在一个排好队打饭的对列中,张三是后来了,直接插到了队列中李四的后边,因为张三和李四是哥们儿。

        /// <summary>
/// 插入排序
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static string InsertionSorter(int[] list)
{
for(int i=;i<list.Length;i++)
{
int t=list[i];
int j = i;
while ((j > ) && (list[j - i] > t))
{
list[j] = list[j - i];
--j;
}
list[j] = t;
}
string retstr = "插入排序<br/>";
for (int i = ; i < list.Length; i++)
{
retstr += list[i] + "<br/>"; }
return retstr;
}

希尔排序:将所有的数据分组,小组内进行排序,之后重新分组,组内数据增多,重新排序(每个步骤都使用直接插入排序)。

举一个形象的例子:还是排队打饭,学校有好多班级,不能所有班级都一起打,先按班级(分组)排好队,最后所有的班级再组成一个大组,再一个一个的排着打饭。

        /// <summary>
/// 希尔排序
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static string ShellSorter(int[] list)
{
int inc;
for (inc = ; inc <= list.Length / ; inc = * inc + );
for (; inc > ; inc /= )
{
for (int i = inc + ; i <= list.Length; i += inc)
{
int t = list[i - ];
int j = i;
while ((j > inc) && (list[j - inc - ] > t))
{
list[j - ] = list[j - inc - ];
j -= inc;
}
list[j - ] = t;
}
}
string retstr = "希尔排序<br/>";
for (int i = ; i < list.Length; i++)
{
retstr += list[i] + "<br/>"; }
return retstr; }

MVC 调用代码:

            //数组
int[] numberlist=new int[]{,,,,};
//冒泡顺序Test
string ret1str = StringHelper.BubbleSorterOrderByAsc(numberlist);
//冒泡逆序Test
string retstr = StringHelper.BubbleSorterOrderByDesc(numberlist);
//选择排序Test
string ret2str = StringHelper.SelectionSorter(numberlist);
//插入排序Test
string ret3str = StringHelper.InsertionSorter(numberlist);
//希尔排序Test
string ret5str = StringHelper.ShellSorter(numberlist); ViewBag.BubbleSorter = ret5str;
  @{@MvcHtmlString.Create(ViewBag.BubbleSorter);}

资料来源:http://blog.csdn.net/xudepeng0813/article/details/7591883

声明:本博客高度重视知识产权保护,发现本博客发布的信息包含有侵犯其著作权的链接内容时,请联系我,我将第一时间做相应处理,联系邮箱ffgign@qq.com

作者:Mark Fan (小念头)    来源:http://cube.cnblogs.com
说明:未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有疑问,可以通过 ffgign@qq.com 联系作者,本文章采用 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可

 

最新文章

  1. Android—判断当前时间段
  2. Java白皮书的关键术语
  3. Hyperledger fabric Client Node.js Hello World示例程序
  4. Hadoop 2.5.1编译
  5. [日常训练]article
  6. Android自动化压力测试之Monkey Test Android常见的错误类型及黑白名单的使用方法(四)
  7. PyQt多窗口调用
  8. 用蓝牙芯片CC2541/CC2540实现一个智能恒温箱
  9. vivado License导入方法与资源获取
  10. 特殊权限 SUID、SGID、Sticky
  11. Linux核心命令使用方法
  12. centos设置路由route
  13. 算法实践--最小生成树(Prim算法)
  14. 初步了解Owin
  15. js對象
  16. python-数据分析与展示(Numpy、matplotlib、pandas)---3
  17. Html——拖放
  18. Font Awesome 4.0.3 提供了369个网页常用的矢量字体图标,新浪、人人 的矢量图标也到其中哟
  19. profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析&#160;Part&#160;2
  20. Android-Window(一)——初识Window

热门文章

  1. jvm(13)-线程安全与锁优化
  2. Android ADB工具-操作手机和获取手设备信息(四)
  3. 怎么在Word中找MathType菜单
  4. Python+selenium打开或关闭浏览器
  5. Laravel5.1 模型--ModelFactory
  6. Ubuntu 14.04 Vim编辑文件的一般操作
  7. EditTextView
  8. Android无线测试之—UiAutomator UiDevice API介绍四
  9. 《从零开始学Swift》学习笔记(Day43)——构造函数继承
  10. setlocale同mbstowcs函数的关系(VS2008下setlocale(LC_ALL, &quot;chs&quot;)可以执行成功,BCB使用setlocale(LC_ALL, &quot;Chinese (Simplified)_People&#39;s Republic of China&quot;),linux上locale别名表大概在 /usr/lib/X11/locale/locale.alias)