您的位置:首页 > 编程语言 > C#

C# 常用排序方法 冒泡排序,直接选择排序,直接插入排序

2007-08-11 15:29 495 查看
using System;
using System.Collections.Generic;
using System.Text;

namespace Sorts
{
class Sort
{
public void swap(ref int x, ref int y)
{
int temp;
temp = x;
x = y;
y = temp;
}

public void outlist(int[] arr)
{
foreach (int x in arr) //输出
{
Console.Write("{0}t", x);
}
}

public void BubbleSort(int[] arr) //冒泡排序
{
int i, j, change=0,loop=0;
bool exchange;
for (i = 0 ; i < arr.Length ; i++) //最多做R.Length-1次排序
{
exchange = false;
// ***从大到小排列***
//for (j = arr.Length - 2; j >= i; j--)
//{

// if (arr[ j + 1 ] > arr[ j ])
// {
// swap(ref arr[j], ref arr[j + 1]);
// exchange = true;
// }

//***从小到大排列***
for (j = 0; j < arr.Length - 1; j++)
{

if (arr[j] > arr[j + 1])
{
swap(ref arr[j], ref arr[j + 1]);
change++;
exchange = true;
}

}
if (!exchange) //本次未发生排序,提前终止算法
{ break; }
loop++;
}
Console.WriteLine("冒泡排序结果:");
outlist(arr);
Console.WriteLine("本次排序交换{0}次,循环{1}次n",change,loop);
}

public void SelectSort(int[] arr) //直接选择排序
{
int i,j,min,change=0,loop=0;
for ( i = 0; i < arr.Length-1; i++)
{
min = i;
for ( j = i+1; j < arr.Length; j++)
{
if (arr[j] < arr[min]) //此处改为">"则从大到小排列
min = j;
}
swap(ref arr[min], ref arr[i]);
change++;
loop++;

}
Console.WriteLine("直接排序结果");
outlist(arr);
Console.WriteLine("本次排序交换{0}次,循环{1}次n", change, loop);
}

public void StraightSort(int[] arr) //直接插入排序
{
int i, j,temp;
for (i = 1; i < arr.Length; i++)
{
j = i ;
temp = arr[i];
while ((j > 0) && (arr[j-1] >= temp))
{
arr[j] = arr[j - 1];
j--;
}
arr[j] = temp;
}
Console.WriteLine("直接插入结果");
outlist(arr);
}

static void Main()
{
Sort obj = new Sort();
int[] myarr = new int[10] ;
Random rand = new Random();
for (int i = 0; i < 10; i++)
{
myarr[i] = rand.Next(0, 100);
}
Console.WriteLine("随机数组是:");
foreach (int x in myarr) //输出
{
Console.Write("{0}t", x);
}
Console.WriteLine();
obj.BubbleSort(myarr);
obj.SelectSort(myarr);
obj.StraightSort(myarr);

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐