学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络
冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到了第一个位置上(或最后位置),之后不考虑选出的元素,对剩余的元素进行循环的排列。
举一个例子:我们在火车站买票有军人、记者、两会代表优先的原则,大家排队买票,这时来了一个两会代表买票,他从后往前问买票的人是否是军人、记者、两会代表,如果不是就和普通老百姓交换位置
/// <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 中国大陆许可协议进行许可
学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]的更多相关文章
- 冒泡排序 & 选择排序 & 插入排序 & 希尔排序 JavaScript 实现
之前用 JavaScript 写过 快速排序 和 归并排序,本文聊聊四个基础排序算法.(本文默认排序结果都是从小到大) 冒泡排序 冒泡排序每次循环结束会将最大的元素 "冒泡" 到最 ...
- 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
- 冒泡排序 选择排序 插入排序希尔排序 java
双向冒泡 package com.huang; public class _014_bubb_sort { int[] b={1,2}; static int a[]={12,4,35,65,43,6 ...
- 内部排序->插入排序->希尔排序
文字描述 希尔排序又称缩小增量排序,也属于插入排序类,但在时间效率上较之前的插入排序有较大的改进. 从之前的直接插入排序的分析得知,时间复杂度为n*n, 有如下两个特点: (1)如果待排序记录本身就是 ...
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法: ...
- 数据结构和算法(Golang实现)(22)排序算法-希尔排序
希尔排序 1959 年一个叫Donald L. Shell (March 1, 1924 – November 2, 2015)的美国人在Communications of the ACM 国际计算机 ...
- 排序算法--希尔排序(Shell Sort)_C#程序实现
排序算法--希尔排序(Shell Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困难 ...
- 《Algorithm算法》笔记:元素排序(2)——希尔排序
<Algorithm算法>笔记:元素排序(2)——希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...
- C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
随机推荐
- echarts Y轴刻度保留几位小数
yAxis: [ { type: 'value', name: '雨量(mm)', nameLocation: 'start', inverse: true, axisLabel: { ...
- iOS 。开发之指纹识别功能
// 头文件导入 #import <LocalAuthentication/LocalAuthentication.h> //在iPhone5s的时候,苹果推出了指纹解锁.但是在ios8. ...
- ios - 视图 渐变
// // YViewGradient.m // AoleYou20170907 // // Created by XY IOS on 2018/4/25. // Copyright © 2018年 ...
- linux 文本编辑器
文本编辑器 文本编辑器是Linux操作系统中的重要工具.其中,VI是使用最广泛的文本编辑器,其可以在任何shell中使用.此外,Red Hat Enterprise Linux6 还提供了gedit工 ...
- cocos2d-x:七彩连珠
大学前,我一直以为学计算机就是学做游戏,或者玩游戏...(我果断的用大学的差不多五分之二实践了后面半块.) 大学后,人们一直以为学计算机的就是 修电脑.装机.盗qq号.word.excel....最近 ...
- python 引用的含义,尤其注意列表跟字典的使用
a = '12345'b = aa = 'sssss'print('a ===== %s' % a)print('b ===== %s' % b) 结果: a ===== sssss b ===== ...
- 【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队
[BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...
- 《从零开始学Swift》学习笔记(Day2)——使用Web网站编写Swift代码
Swift 2.0学习笔记——使用Web网站编写Swift代码 原创文章,欢迎转载.转载请注明:关东升的博客 Swift程序不能在Windows其他平台编译和运行,有人提供了一个网站swiftstub ...
- shell中${}的使用
1. 截断功能${file#*/}: 拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/}: 拿掉最后一条/及其左边的字符串:my ...
- 地址栏输入url按回车之后发生了什么
地址栏输入url按回车之后发生了什么? 1.我们在浏览器中输入网址 2.浏览器到DNS查找域名对应的IP地址 3. 浏览器打开TCP连接(默认端口为80),向该IP的服务器发送一条HTTP请求,如果浏 ...