冒泡排序注意事项
完整代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
lvb[0] = 855;
lvb[1] = 4;
lvb[2] = 8;
lvb[3] = 9;
lvb[4] = 1;
lvb[5] = 10;
lvb[6] = 15;
lvb[7] = 85;
lvb[8] = 56;
lvb[9] = 45;
int[] lvbotmp = BubbleSort(lvb);
for ( int i = 0; i < lvb.Length; i++ )
{
richTextBox1.Text += i.ToString() + "\t >> \t" + lvbotmp[i] + "\t \r\n";
}
for (int i = 0; i < lvb.Length; i++)
{
richTextBox1.Text += i.ToString() + "\t << \t" + lvb[i] + "\t \r\n";
}
}
int[] lvb = new int[10];
static int[] BubbleSort(int[] indat)
{
int[] intArray = new int[indat.Length];
for ( int k = 0; k < indat.Length; k++)
{
intArray[k] = indat[k];
}
int temp = 0;
bool swapped;
for (int i = 0; i < intArray.Length; i++)
{
swapped = false;
for (int j = 0; j < intArray.Length - 1 - i; j++)
if (intArray[j] > intArray[j + 1])
{
temp = intArray[j];
intArray[j] = intArray[j + 1];
intArray[j + 1] = temp;
if (!swapped)
swapped = true;
}
if (!swapped)
{
return intArray;
}
}
return intArray;
}
private void button1_Click(object sender, EventArgs e)
{
Form1_Load(null, null);
}
}
}
代码分析
增加此部分,缓存主要是因为调用函数使用的传入参数是地址传递,如果直接对此数据进行排序,则又有的数组会被直接替代,造成缓存数据错误。当然也可以使用标准的冒泡排序,不过缓存应该放在外面,只是如果多次调用则需要更多的代码行数来解决问题。在函数内部进行二次函数数组创建。使用地址传递也可以有效进行排序。
当然上述函数其中的swapped 可以省略。
默认的冒泡排序缺点是修改了传入的数组内容(也就是如果是一个后续还需要是使用的数组则不可以直接调用默认的冒泡排序直接传入)。
1.1 冒泡排序 | 菜鸟教程 (runoob.com)https://www.runoob.com/w3cnote/bubble-sort.html
特此记录
anlog
2023年3月2日