C#冒泡排序程序法排序过程演示程序

C#冒泡排序法 - 现代-|-韦小宝的主页
C#冒泡排序法
现在的许多IT公司在面试的时候,都会有类似于手写代码题一类的考试,其中有两道题是出现几率非常大的,几乎成了所有IT企业的必考题.所以,在这里我自己写了一下这两个题的C#代码具体实现,希望对有些人的面试有所帮助(其实许多场合这两道题起着决定性作用).&&&&&&&&&当然,许多公司在机试的时候,允许应聘者上网搜集资料,如果你正好遇到这样的公司而且遇到这样的题目了,哈哈~~那就来我的博客吧,直接复制以下代码,把类文件里的代码全部替换,将是100分答案.
&&&&&&&&嘿嘿,当然我这里也有很多代码都是为了搔情,不是核心代码,只是为了让人体验更好而已,没什么大怪了.
&&&&&&&&我的&刚刚冒泡排序法&的具体代码如下:
using&System.Collections.G
using&System.T
namespace&GanggangApplication
&&&&class&Program
&&&&&&&&static&void&Main(string[]&args)
&&&&&&&&&&&&SortedNumbers();
&&&&&&&&///&&summary&
&&&&&&&&///&该方法获得需要排序的数组,表调用排序方法进行排序
&&&&&&&&///&&/summary&
&&&&&&&&public&static&void&SortedNumbers()
&&&&&&&&&&&&int&numberC
&&&&&&&&&&&&int[]&
&&&&&&&&&&&&Console.WriteLine(&----------刚刚冒泡排序法----------&);
&&&&&&&&&&&&Console.WriteLine(&请问您要对多少为数字进行排序?&);
&&&&&&&&&&&&numberCount&=&Convert.ToInt32(Console.ReadLine());
&&&&&&&&&&&&numbers&=&new&
&&&&&&&&&&&&Console.WriteLine(&请输入您要进行排序的这{0}个数字:&,numberCount);
&&&&&&&&&&&&for&(int&i&=&0;&i&&&numberC&i++)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&numbers&=&Convert.ToInt32(Console.ReadLine());
&&&&&&&&&&&&}
&&&&&&&&&&&&Console.WriteLine(&\n您要进行排序的{0}个数字分别为:&,numberCount);
&&&&&&&&&&&&for&(int&i&=&0;&i&&&numberC&i++)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.Write(numbers.ToString()&+&&\t&);
&&&&&&&&&&&&}
&&&&&&&&&&&&Console.WriteLine(&\n您要对这{0}个数字进行什么排序?(1表示升序,2表示降序)&,numberCount);
&&&&&&&&&&&&int&method&=&Convert.ToInt32(Console.ReadLine());
&&&&&&&&&&&&while&(method&!=&1&&&&method&!=&2)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.WriteLine(&只能输入1或者2,请您重新输入!&);
&&&&&&&&&&&&&&&&method&=&Convert.ToInt32(Console.ReadLine());
&&&&&&&&&&&&}
&&&&&&&&&&&&//调用排序方法
&&&&&&&&&&&&ExecuteSortedMethod(numbers,&method);
&&&&&&&&&&&&Console.WriteLine(&排序后的结果为:&);
&&&&&&&&&&&&for&(int&i&=&0;&i&&&numberC&i++)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.Write(numbers.ToString()&+&&\t&);
&&&&&&&&&&&&}
&&&&&&&&&&&&Console.WriteLine(&\n----------刚刚冒泡排序法----------&);
&&&&&&&&&&&&Console.ReadKey();
&&&&&&&&///&&summary&
&&&&&&&&///&接受数字参数和排序方法参数,进行冒泡排序
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name=&num&&要进行排序的整数数组&/param&
&&&&&&&&///&&param&name=&sortedMethod&&排序方法标识:1为升序,2为降序&/param&
&&&&&&&&public&static&void&ExecuteSortedMethod(int[]&num,&int&sortedMethod)
&&&&&&&&&&&&if&(sortedMethod&==&1)&&&&&&//升序排列
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&num.Length&-1;&i++)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&for&(int&j&=&0;&j&&&num.Length&-&1&-&i;&j++)
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&if&(num&&&num[j&+&1])
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&int&temp&=&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&num&=&num[j&+&1];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&num[j&+&1]&=&
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&if&(sortedMethod&==&2)&&&&&&//降序排列
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&num.Length&-&1;&i++)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&for&(int&j&=&0;&j&&&num.Length&-&1&-&i;&j++)
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&if&(num&&&num[j&+&1])
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&int&temp&=&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&num&=&num[j&+&1];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&num[j&+&1]&=&
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
运行结果如下图:
其实这里面的核心代码只有几行,就是如下:
&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&num.Length&-&1;&i++)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&for&(int&j&=&0;&j&&&num.Length&-&1&-&i;&j++)
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&if&(num&&&num[j&+&1])
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&int&temp&=&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&num&=&num[j&+&1];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&num[j&+&1]&=&
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&只要稍微修改一下,或者把排序的数组写死,那么这道题就再简单不过了,呵呵!数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序) - Mr.Johness - 博客园
阿何的程序人生
  我们都说程序就是数据加算法,即数据和对数据进行操作的流程。
  而对计算机中所存储的数据进行的最普遍的两种操作就是排序和查找。
  现在我们就使用C#语言实现三种基础的排序算法&&冒泡排序、选择排序、插入排序。
  首先我们定义一个能够支持我们创建自定义排序规则的数据结构。我们使用C#的类来作为我们实现的对象,在这个类中维护着一个数组。
  其定义如下代码:
3 namespace DataStructuresandAlgorithms
// 用来承载我们实验的自定义类
public class CArray
// 核心的数组,用于对数据的存储和操作
private int[]
// 用于标识当前对象所存储的值的个数
private int
// 用于向外界返回此实例最大存储数据个数
// 因为数组的大小固定,所以此值在实例被初始化后就是固定的
// 此属性用于验证,但我们不是很需要
// 构造函数,参数即为该实例内部维护的数组的长度
public CArray(int size)
arr = new int[size];
//this.size =
elements = 0;
// 此方法用于向对象内存储数据
public int Insert(int item)
arr[elements] =
return elements++;
// 此方法用于显示当前实例存储了哪些数据
public void DisplayElements()
foreach (int item in arr)
Console.Write(item + " ");
// 此方法用于完全清除当前实例存储的数据
public void Clear()
for (int i = 0; i & arr.L i++)
arr[i] = 0;
elements = 0;
// 冒泡排序
public void BubbleSort()
// TDO 暂不实现
// 选择排序
public void SelectSort()
// TDO 暂不实现
// 插入排序
public void InsertSort()
// TDO 暂不实现
  有了我们自定义的一个类来作为数据结构,我们就可以实现排序了。
  排序算法都是浮云,大家需要从本质上理解:就是把多个值分成两个来比较,经过多次的划分和比较后确定这些值的排列顺序。
  冒泡排序:通过相邻两个值的大小比较(多次),保证数值排序为从小到大的排序方法。
    效果及实现原理:外层的数列个数次的循环,每次循环会将最大的数值&冒泡&到右端,因为是相邻的两两比较。
    具体实现:双重循环,外层数列个数次,保证每一个数值都处于正确位置(因为每循环一次,至少会确定一个数值的正确位置),内层从数列个数次逐渐减少次数,因为每一次外层循环会确定最大值、倒数第二大值&&我们在下一次循环就可以忽略掉他们。
    下图为冒泡排序过程中每进行完一次外层循环数列的排序情况:
    下图为全部循环的部分结果:
  很明显:冒泡排序是通过逐个确定最大值来对数列进行排序的。
    我们使用代码来说明这个问题(下面就是冒泡排序的一般写法):
1 // 冒泡排序
public void BubbleSort()
// 外层为数列数值个数次的循环
for (int i = elements - 1; i &= 1; i--)
// 内层次数主义递减
for (int j = 0; j &= i - 1; j++)
// 两两比较,如果后者比前者大则交换位置
// 最终会呈现大的数值逐个&冒泡&到数列右端
if (arr[j + 1] & arr[j])
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] =
  后面我会将整个代码和贴出,其中的冒泡排序经过了一定程度的优化。
  选择排序:通过逐个确定最小值进行的排序。
    和冒泡排序不同,这种排序思路更为清晰:拿出一个值和数列中的其他值比较,完成整次比较后,它如果是最小的,就放到最左边,如果在比较途中发现比它更小的值,那么该更小的值会作为新的比较对象。
    直接上代码可能大家更容易理解:
1 // 选择排序
public void SelectSort()
// 外层数值个数次循环,保证排序结果正确
for (int i = 0; i & i++)
// 内层循环次数递减,因为每次外循环结束后都会确定一个最小值
// 再一次循环时就可以忽略那个值了
// 假定第二个位置(第二次及以后的循环会排除已确定的最值)上的值是最小值
// 将索引记录下来,最后会用到,此值也会被动态修改(如果循环过程中发现新的最值)
int index =
for (int j = i + 1; j & j++)
//进行循环,发现新的最小值后则更新最小值,并记录索引
if (arr[index] & arr[j])
// 最值找到后将最小值放到最左边(忽略已经确定的最值)
int temp = arr[i];
arr[i] = arr[index];
arr[index] =
    我们再看一看执行过程中数列的变化:
    我们来看看更细微的变化:
    由于这个数列本身的排序比较规则,不能很好地说明问题,大家可以自己试一下。
  大家可能会觉得疑惑:选择排序也可以逐个确定最大值,为什么我会将其和冒泡排序用这种方式区分呢?这个其实没什么好说的,大家的理解不一样,也可以理解为:
    冒泡排序和选择排序都是通过逐个确定最值来进行排序,不同的是冒泡排序是相邻两两数值比较,选择排序不是如此。
  最后给大家介绍一种比较基础的排序。
  插入排序:通过使逐渐增加个数的数列段有序而最终达到排序的目的。
    大家可能会觉得绕口,这不能怪我,我是文青嘛。简单来说吧:就像我们玩纸牌或麻将牌,我们手上有多张牌时,我们会将新拿到手的牌放到最适合它的位置。比如我们有大小为1、5的纸牌,当拿到3号纸牌时,我们会将它插入到1和5中间,而如果我们拿到6纸牌,我们则会将它放到5后面。
    具体到数列排序上,会造成的效果是:前2个数值有序、前3个数值有序、前4个数值有序&&一直到整个数列有序。
    先看排序时数列变化:
    大家看看代码就会容易理解了:
1 // 插入排序
public void InsertSort()
// 外循环是老规矩
for (int i = 1; i & i++)
// 内层多次循环解决数列段排序问题
// 保存最右边的数值(将要插入已排序数列的值)
int temp = arr[i];
// 新索引用于区分需要排序的原始数列
// 如果在已排好序的数列段中还没有找到比新数值小的数值
while (j & 0 && temp & arr[j - 1])
// 将比新数值大的数值向后移
arr[j] = arr[j - 1];
// 如果在已排好序的数列段中找到了比新数值小的数值
// 将数值替换到此位置
  我将完整代码贴上来供大家参考:
3 namespace DataStructuresandAlgorithms
// 用来承载我们实验的自定义类
public class CArray
private int[]
private int
public CArray(int size)
arr = new int[size];
elements = 0;
public int Insert(int item)
arr[elements] =
return elements++;
public void DisplayElements()
foreach (int item in arr)
Console.Write(item + " ");
public void Clear()
for (int i = 0; i & arr.L i++)
arr[i] = 0;
elements = 0;
// 冒泡排序
public void BubbleSort()
int temp = 0;
bool jx = true;
for (int i = elements - 1; jx && i &= 1; i--)
jx = false;
for (int j = 0; j &= i - 1; j++)
if (arr[j + 1] & arr[j])
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] =
jx = true;
//Console.WriteLine();
//DisplayElements();
Console.WriteLine();
DisplayElements();
// 选择排序
public void SelectSort()
for (int i = 0; i & i++)
int index =
for (int j = i + 1; j & j++)
if (arr[index] & arr[j])
//Console.WriteLine();
//DisplayElements();
int temp = arr[i];
arr[i] = arr[index];
arr[index] =
Console.WriteLine();
DisplayElements();
// 插入排序
public void InsertSort()
for (int i = 1; i & i++)
int temp = arr[i];
while (j & 0 && temp & arr[j - 1])
arr[j] = arr[j - 1];
Console.WriteLine();
this.DisplayElements();
static void Main(string[] args)
CArray ca = new CArray(10);
Random rnd = new Random(100);
for (int i = 0; i & 10; i++)
ca.Insert(rnd.Next(0, 100));
ca.DisplayElements();
Console.WriteLine();
ca.BubbleSort();
//ca.InsertSort();
//ca.SelectSort();
Console.WriteLine();
Console.WriteLine();
ca.DisplayElements();
Console.Read();
  这次的基础排序算法就为您介绍到这里。
&欢迎您移步我们的交流群,无聊的时候大家一起打发时间:
&或者通过QQ与我联系:
&(最后编辑时间 19:20:50)c#学习笔记之冒泡排序法
冒泡排序法就是经过两次循环,分为内循环和外循环,将一组长度为n的数据按照从大到小或者从小到大的顺序排列。其中,外循环是n-1次,即每次选取其中一个数据,选取这个数据后,依次与它的下一个元素作比较,当外循环循环到第j次时,内循环为n-j词。
&& 比如一个数组为【4 5 6 1
2】要求从大到小排列。
第一次外循环:
内循环一:4与5比较,4小于5,交换位置,变成【54612】
内循环二:4与6比较,4小于6,交换位置,变成【56412】
内循环三:4于1比较,4大于1,位置不变,变成【56412】
内循环四:1与2比较,1小于2,位置交换,变成【56421】
第二次外循环:
内循环一:5与6比较,5小于6,交换位置,变成【6542】
内循环二:5与4比较,5大于4,不变。
内循环三:4与1比较,4大于1,不变。
只需循环三次,因为最后一个数一定比5小,不用再比较。
第三次外循环:
只需循环两次,且不变,【65421】
第四次外循环:
内循环一:6与5比较,不变。
循环一次【65421】;
哎呀,突然发现这例子举的不是太好,不过理解就好啦!
加入有n个int类型的数据,外循环为第i次,i从1到n-1,内循环次数j=n-i;
结果即可显示出来,从大到小排列。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。C#设计模式_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&&¥1.00
喜欢此文档的还喜欢
C#设计模式
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 冒泡排序法c程序 的文章

 

随机推荐