c#之冒泡法与快速法排序

设计页面labe1 ,label2 ,label5分别显示随机数,冒泡法从大到小排序与快速法从小到大排序
label3,label4分别显示排序指数 ,一个按钮控件开始排序
------------------------------------------------------------------------------------------
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//**********************快速法排序函数定义**********************************************************
int k2 = 0;//记录快速法排序次数
private void Swap(ref int i, ref int j)
//swap two integer
{
k2++;
int t;
t = i;
i = j;
j = t;
}
//-----------------------数很少时的情况1-----------------------

public void Sort(int[] index2, int low, int high)
{
if (high <= low)
{
//only one element in array index2
//so it do not need sort
return;
}
else if (high == low + 1)
{
//means two elements in array index2
//so we just compare them
if (index2[low] > index2[high])
{
//exchange them
Swap(ref index2[low], ref index2[high]);
return;
}
}
//more than 3 elements in the arrary index2
//begin QuickSort
myQuickSort(index2, low, high);
}

//----------------------------------------------------------
private int Partition(int[] index2, int low, int high)
{
//get the pivot of the arrary index2
int pivot;
pivot = index2[low];
while (low < high)
{
while (low < high && index2[high] >= pivot)
{
high--;
}
if (low != high)
{
Swap(ref index2[low], ref index2[high]);
low++;
}
while (low < high && index2[low] <= pivot)
{
low++;
}
if (low != high)
{
Swap(ref index2[low], ref index2[high]);
high--;
}
}
return low;
}

//-----------------------------------------------------------
public void myQuickSort(int[] index2, int low, int high)
{
if (low < high)
{
int pivot = Partition(index2, low, high);
myQuickSort(index2, low, pivot - 1);
myQuickSort(index2, pivot + 1, high);
}
//快速排序法输出新数组**************想输出排序过程

//for (int n = 0; n < index2.Length; n++)
// Label5.Text = Label5.Text + index2[n].ToString() + " ";
//Label5.Text = Label5.Text + "下一轮:" + "<br>";
//Label4.Text = k2.ToString();
}
//**************************按钮点击事件*********************************************
protected void Button1_Click(object sender, EventArgs e)
{
int m = 0, i = 0;
int[] index = new int[50];//建立一个数组用于存放已经选出的值
int[] index2 = new int[50];
index[0] = 1;
while (m < index.Length)
{
loop1:
Random k = new Random(unchecked((int)DateTime.Now.Ticks));
int number = Convert.ToInt32(k.Next(0, 100));
//0到100之间的整型随机数
//Response.Write("number = " + number + "\n");
for (i = 0; i < m + 1; i++) //判断重复
{
if (number != index[i]) continue;
else if (i != m) goto loop1;
else break;
}
index[m] = number;
//Response.Write("m = "+m+" "+"产生的数是:" + index[m] +"<br>");
Label1.Text = Label1.Text + number.ToString() + " ";
m++;
}
//-----------------------------------------------------------------------
for (i = 0; i < index.Length; i++)
{
index2[i] = index[i];
}

//**************冒泡法排序*****从大到小*********************************************

int k1 = 0; //记录排序次数
for (int n = 0; n < index.Length; n++)
{
for (int j = n; j < index.Length; j++)
{
if (index[n] < index[j])
{
int temp = index[n];
index[n] = index[j];
index[j] = temp;
k1++;
}
}
}
//输出排序后的数组
for (int n = 0; n < index.Length; n++)
Label2.Text = Label2.Text + index[n].ToString() + " ";
Label3.Text = k1.ToString();

//*******************快速法排序*****************************************************
int low = 0, high = index2.Length-1;
Sort(index2, low, high);//函数调用
//快速排序法输出新数组
//??????????????????????????????????????????????????????并不想输出排序过程
for (int n = 0; n < index2.Length; n++)
Label5.Text = Label5.Text + index2[n].ToString() + " ";
Label5.Text = Label5.Text + "下一轮:" + "<br>";
Label4.Text = k2.ToString();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值