码迷,mamicode.com
首页 > 编程语言 > 详细

C#冒泡排序

时间:2015-04-28 09:46:07      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:排序算法   c#   

冒泡排序法:

1:简介:

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,由此而得名。

2:基本原理:

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小的数放在前面,大的数??放在后面。即在第一趟:首先比较第一个和第二个数,将小的数放在前面,大的数放在后面。然后比较第二个数和第三个数,将小的数放在前面,将大的数放在后面,如此继续,直到比较最后两个数,将小的数放在前面,大的数放在后面。至此第一趟结束,将最大的数放在了最后。在第二趟:仍从第一对数开始比较(因为可能第二个数和第三个数的交换,使得第一个数不再小于第二个数),将小的数放在前面,将大的数放在后面,一直比较到倒数第二个数(倒数第一的位置已经是最大的了),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数了)。如此下去,重复以上过程,直至最终完成排序。

3:基本算法:

在这里需要提前做一个声明,我们在使用数组存储数据的时候,不从下标0开始,这样呢,可以方便我们一一对应着进行比较,第一个数据的下标就是1。

将待排序的数据存放到一个数组a[1]-a[n]中,我们假设需要将数据按照从小到大的顺序排列。

例如,现在我们需要对数据30,10,20,60,25,40进行排序。

第一趟:

从第一个元素开始到第五个元素依次与其后面相邻的数据进行比较。

1:将第一个数据和第二个数据进行比较,交换后得到:

10,30,20,60,25,40

2:将第二个数据和第三个数据进行比较,交换后得到:

10,20,30,60,25,40

3:将第三个数据和第四个数据进行比较,交换后得到:

10,20,30,60,25,40

4:将第四个数据和第五个数据进行比较,交换后得到:

10,20,30,25,60,40

5:将第五个数据和第六个数据进行比较,交换后得到:

10,20,30,25,40,60

此时,第一趟比较交换结束,最大的数60已经在6号位置了。

第二趟及第N趟就照着第一趟类推,但需要注意:第N次排序后数列倒数第N个数已经是第N大了,所以,每次排序的次数都将减少一次,直到排序次数只剩一次为止,详细的请看代码。

4:代码:

核心代码:

public int[] Pop(int[] listI) 
{ 
    //数组为null抛出异常 
    if (listI == null) throw new ArgumentNullException("listI"); 
    //存储临时的需要冒泡的值 
    int temp = 0; 
    //从数组的第一个值遍历到倒数第二个值 
    for (int i = 0; i < listI.Length - 1; i++) 
    { 
        //从比i大1的值开始遍历到结束 
        //这里比较的总是比i大的值,因为之前的值已经冒泡完成 
        for (int j = i + 1; j < listI.Length; j++) 
        { 
            //如果前一个值大于后一个值,他们交换位置 
            if (listI[i] > listI[j]) 
            { 
                //交换位置 
                temp = listI[i]; 
                listI[i] = listI[j]; 
                listI[j] = temp; 
            } 
        } 
    } 
    return listI; 
}

完整代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 冒泡排序实验
{
    class Program
    {
        static public int[] Pop_(int[] listI)
        {
            //数组为null抛出异常
            if (listI == null) throw new ArgumentNullException("listI");
            //存储临时的需要冒泡的值
            int temp = 0;
            //从数组的第一个值遍历到倒数第二个值
            for (int i = 0; i < listI.Length - 1; i++)
            {
                //从比i大1的值开始遍历到结束
                //这里比较的总是比i大的值,因为之前的值已经冒泡完成
                for (int j = i + 1; j < listI.Length; j++)
                {
                    //如果前一个值大于后一个值,他们交换位置
                    if (listI[i] > listI[j])
                    {
                        //交换位置
                        temp = listI[i];
                        listI[i] = listI[j];
                        listI[j] = temp;
                    }
                }
            }
            return listI;
        }
        static void Main(string[] args)
        {
            int[] a = {3,5,23,6,3,77,4,8,5,8,3 };
            foreach (int i in Pop_(a)) 
                Console.Write(i.ToString() + ",");
            Console.ReadLine();
        }
    }
}

C#冒泡排序

标签:排序算法   c#   

原文地址:http://blog.csdn.net/imcjysy/article/details/45330483

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!