数组的排序算法有哪些?如何实现?
收起
知与谁同
2018-07-18 12:35:05
1676
0
1
条回答
写回答
取消
提交回答
-
c#冒泡算法:
using System;
using System.Diagnostics;
namespace 经典算法之冒泡排序
{
class Program
{
static void Main()
{
/* 冒泡排序百度百科:
* http://baike.baidu.com/view/254413.htm
* 核心是通过双重循环将数组较小数往前移动,较大数往后移动
* 还可通过标识符(flag)来判断本趟循环是否进行交换,
* 若一趟循环中一次交换都不发生,那么说明已经排序完毕,
* 可以就此结束排序,加快排序的总体时间 */
/* 使用随机数类生成一个随机数列
* 特别注意:声明并实例化一个类是需要消耗一定时间的,
* 尽量不要将类的实例化放在一个循环中生成,
* 这将导致程序运行非常缓慢 */
Random rand = new Random(); // 声明并实例化一个随机数类
int[] intArray = new int[100000]; // 初始化一个数组
int maxIndex = intArray.Length - 1; // 初始化最大索引变量
Console.WriteLine("冒泡排序前的数组:");
// 生成一个随机数列
for (int i = 0; i <= maxIndex; i++) {
intArray[i] = rand.Next(1000);
Console.Write("{0}\t", intArray[i]);
}
Console.WriteLine();
// 开始进行冒泡排序
Stopwatch stw = new Stopwatch(); // 声明并实例化停止监视类
stw.Start(); // 开始监视
bool isExchange = false; // 声明交换标识符,表示本趟排序是否进行交换
for (int i = 0; i < maxIndex; i++) {
isExchange = false; // 重置交换标识符状态
for (int j = maxIndex; j > i; j--) {
// 比较前后两数大小
if (intArray[j] > intArray[j - 1]) {
// 后数大于前数,进行交换
int temp = intArray[j];
intArray[j] = intArray[j - 1];
intArray[j - 1] = temp;
isExchange = true; // 修改交换标识符为真
}
}
//continue;
// 根据交换标识符判断本趟是否进行了交换
if (!isExchange) {
// 本趟没有进行交换
break;
}
}
stw.Stop(); // 停止监视
// 输出排序后的数组
Console.WriteLine("冒泡排序后的数组:");
foreach (int element in intArray) {
Console.Write("{0}\t", element);
}
Console.Write("排序消耗时间:" + stw.Elapsed.Milliseconds.ToString());
Console.ReadKey();
}
}
}
2019-07-17 22:49:35