C#,冒泡排序算法(Bubble Sort)的源代码与数据可视化

排序算法是编程的基础。

常见的四种排序算法是:简单选择排序、冒泡排序、插入排序和快速排序。其中的快速排序的优势明显,一般使用递归方式实现,但遇到数据量大的情况则无法适用。实际工程中一般使用"非递归"方式实现。本文搜集发布四种算法的源代码及非递归快速排序的代码。

冒泡排序(Bubble Sort)算法

思路:从左到右,将相邻的进行比较,若前面数值大于后面数值,则交换,否则不交换。

代码改编自:C#实现常见排序算法_菜园赤子的博客-CSDN博客_c#排序算法

代码:

using System;

using System.Text;

using System.Collections.Generic;

using System.Windows.Forms;

namespace WindowsFormsApp6

{

public partial class Form1 : Form

{

Random rnd = new Random((int)DateTime.Now.Ticks);

List<string> slides = new List<string>();

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

this.Text = "C#,四种常见排序算法的可视化编程------北京联高软件开发有限公司";

button1.Text = "选择排序"; button1.Cursor = Cursors.Hand;

button2.Text = "冒泡排序"; button2.Cursor = Cursors.Hand;

button3.Text = "插入排序"; button3.Cursor = Cursors.Hand;

button4.Text = "快速(递归)"; button4.Cursor = Cursors.Hand;

button5.Text = "快速(非递归)"; button5.Cursor = Cursors.Hand;

panel1.Dock = DockStyle.Top;

panel2.Dock = DockStyle.Fill;

webBrowser1.Navigate("http://www.315soft.com");

}

private int[] RandArray()

{

int n = 20;

int[] dataArray = new int[n];

for (int i = 0; i < n; i++)

{

dataArray[i] = rnd.Next(20, 100);

}

return dataArray;

}

private void button2_Click(object sender, EventArgs e)

{

slides.Clear();

BubbleSort(RandArray());

loop = 0;

timer1.Interval = 100;

timer1.Enabled = true;

}

/// <summary>

/// 冒泡排序

/// 改编自:https://blog.csdn.net/qq_36238093/article/details/97051032

/// </summary>

/// <param name="dataArray"></param>

public void BubbleSort(ref int[] dataArray)

{

for (int i = 0; i < dataArray.Length; i++)

{

bool flag = true;

for (int j = 0; j < dataArray.Length - i - 1; j++)

{

if (dataArray[j] > dataArray[j + 1])

{

int temp = dataArray[j];

dataArray[j] = dataArray[j + 1];

dataArray[j + 1] = temp;

flag = false;

slides.Add(Slide(button2.Text, dataArray, i, j));

}

}

if (flag)

{

break;

}

}

}

private string Slide(string title, int[] dataArray, int a, int b)

{

StringBuilder sb = new StringBuilder();

sb.AppendLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"\>");

sb.AppendLine("<html xmlns=\"http://www.w3.org/1999/xhtml\\" >");

sb.AppendLine("<head>");

sb.AppendLine("<style>");

sb.AppendLine("td { vertical-align:bottom;text-align:center;font-size:12px; } ");

sb.AppendLine(".bar { width:" + (int)((webBrowser1.Width - dataArray.Length * 11) / dataArray.Length) + "px;font-size:12px;border:solid 1px #FF6701;background-color:#F08080;text-align:center;border-radius:3px; }");

sb.AppendLine("</style>");

sb.AppendLine("</head>");

sb.AppendLine("<body>");

sb.AppendLine("<table width='100%' style='border-bottom:solid 1px #E9E9E0;'>");

sb.AppendLine("<tr>");

sb.AppendLine("<td>方法:" + title + "</td>");

sb.AppendLine("<td>数据:" + dataArray.Length + "</td>");

sb.AppendLine("<td>步骤:[0]</td>");

sb.AppendLine("</tr>");

sb.AppendLine("</table>");

sb.AppendLine("<br>");

sb.AppendLine("<table width='100%' style='border-bottom:solid 15px #E9E9E0;'>");

sb.AppendLine("<tr>");

for (int i = 0; i < dataArray.Length; i++)

{

if (i == a || i == b)

{

sb.AppendLine("<td>" + dataArray[i] + "<div class='bar' style='height:" + dataArray[i]*3 + "px;background-color:#993333;'></div></td>");

}

else

{

sb.AppendLine("<td>" + dataArray[i] + "<div class='bar' style='height:" + dataArray[i]*3 + "px;'></div></td>");

}

}

sb.AppendLine("</tr>");

sb.AppendLine("</table>");

sb.AppendLine("</body>");

sb.AppendLine("</html>");

return sb.ToString();

}

int loop = 0;

private void timer1_Tick(object sender, EventArgs e)

{

if (loop < slides.Count + (3000 / timer1.Interval))

{

if (loop < slides.Count)

{

webBrowser1.DocumentText = slides[loop].Replace("[0]", loop + " / " + slides.Count);

loop++;

return;

}

loop++;

return;

}

loop = 0;

}

}

}

相关推荐
爱吃生蚝的于勒几秒前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~4 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
binishuaio10 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE12 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻16 分钟前
WPF中的依赖属性
开发语言·wpf
洋24024 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙26 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点27 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
王哈哈^_^29 分钟前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城32 分钟前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵