【C#】[算法]冒泡排序

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace 冒泡排序算法
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /*
            算法:冒泡法
            问题:无序数排列
            问题描述:有一组无序排列的整数,通过算法计算使它们成为从小到大依次排列?
            问题分析:
            首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则交换两记录的值。
            然后比较第二个和第三个记录的关键字,依次类推,直至最后一个记录也进行过比较。
            上述过程称为第一趟冒泡排序,其结果是最大值被安置到最后一个记录的位置上。
            进行第二趟排序,对前N-1个记录进行同样的排序。
            依次类推,当进行完N-1趟排序后,所有记录有序排列。
            备注
        */

        int[] s = new int[10];//存放要排序的数

        //窗体载入
        private void Form1_Load(object sender, EventArgs e)
        {
            button2_Click(sender, e);//执行按钮2的事件,取随机数
        }

        //取随机数
        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();//清空列表
            Random r = new Random();//随机数种子
            for (int i = 0; i <10; i++)
            {
                s[i] = r.Next(100);//产生10个随机数填入数组
                listBox1.Items.Add(s[i].ToString());//随机数填入控件
            }

           
        }
        //排序
        private void button1_Click(object sender, EventArgs e)
        {
            listBox2.Items.Clear();//清空列表

            for (int i = 0; i <= s.Length; i++)//第一层循环
            {
                for (int j = i+1; j < s.Length; j++)//第二层循环
                {
                    if (s[i] > s[j])//按升序交换位置,数大的在后面
                    {
                        int k;//中间变量
                        k = s[j];
                        s[j] = s[i];
                        s[i] = k;
                    }
                }

            }
            //把排序后的数组循环添加到窗体控件上
            for (int i = 0; i < 10; i++)
            {
                listBox2.Items.Add(s[i].ToString());
            }
        }

 
    }
}
posted @ 2011-01-25 13:34  isaced  阅读(405)  评论(0编辑  收藏  举报