3-基础排序算法
概述:
对计算机中所存储的数据进行的最普遍的两种操作就是排序和查找。本次讨论的有关数据排序和查找的方法包括:冒泡排序,选择排序和插入排序。
- 冒泡排序
假设要把一列数按升序方式进行排序,即较大的数值浮动到列的右侧,而较小的数值浮动到列的左侧。这种效果可以通过下列操作来实现:多次遍历整个列,并且比较相邻数值,如果左侧的数值大于右侧数值就进行交换。
冒泡排序
#region 冒泡排序
/// <summary>
/// 冒泡排序
/// </summary>
public void BubbleSort()
{
int temp;
for (int outer = upper; outer >= 1; outer--)
{
for (int inner = 0; inner <= outer - 1; inner++)
{
if ((int)arr[inner] > arr[inner + 1])
{
temp = arr[inner];
arr[inner] = arr[inner + 1];
arr[inner + 1] = temp;
}
}
this.DisplayElements();
}
}
#endregion
/// <summary>
/// 冒泡排序
/// </summary>
public void BubbleSort()
{
int temp;
for (int outer = upper; outer >= 1; outer--)
{
for (int inner = 0; inner <= outer - 1; inner++)
{
if ((int)arr[inner] > arr[inner + 1])
{
temp = arr[inner];
arr[inner] = arr[inner + 1];
arr[inner + 1] = temp;
}
}
this.DisplayElements();
}
}
#endregion
- 选择排序
从数组的起始处开始,把第一个元素与数组中其他元素进行比较。然后,将最小的元素放置在第0个位置上,接着再从第1个位置开始再次进行排序操作。这种操作会一直到除最后一个元素之外的每一个元素都作为新循环的起始点操作过后才终止。
选择排序
#region 选择排序
public void SelectionSort()
{
int min, temp;
for (int outer = 0; outer <= upper; outer++)
{
min = outer;
for (int inner = outer + 1; inner <= upper; inner++)
{
if (arr[inner] < arr[min])
min = inner;
}
temp = arr[outer];
arr[outer] = arr[min];
arr[min] = temp;
this.DisplayElements();
}
}
#endregion
public void SelectionSort()
{
int min, temp;
for (int outer = 0; outer <= upper; outer++)
{
min = outer;
for (int inner = outer + 1; inner <= upper; inner++)
{
if (arr[inner] < arr[min])
min = inner;
}
temp = arr[outer];
arr[outer] = arr[min];
arr[min] = temp;
this.DisplayElements();
}
}
#endregion
- 插入排序
类似于人们通常按照数字顺序或者字母顺序进行排序的方法。例如一些写有名字且随机排放的卡片。当拿出第一卡片的名字是Smith时,把它放在办公桌的左上角位置,然后拿出第二张。这张是Brown。于是把Smith的卡片移动到右侧,把Brown的卡片放在Smith卡片原来的位置。接下来的卡片是Williams,把它放在最右侧位置上。接下来的卡片是Acklin,他需要放在队列的开始处,所以其他所有的卡片都必须向右移动一个位置以便腾出空间放Acklin。这就是插入排序算法的工作原理。
插入排序
#region 插入排序
public void InsertionSort()
{
int inner, temp;
for (int outer = 1; outer <= upper; outer++)
{
temp = arr[outer];
inner = outer;
while (inner > 0 && arr[inner - 1] > temp)
{
arr[inner] = arr[inner - 1];
inner -= 1;
}
arr[inner] = temp;
this.DisplayElements();
}
}
#endregion
public void InsertionSort()
{
int inner, temp;
for (int outer = 1; outer <= upper; outer++)
{
temp = arr[outer];
inner = outer;
while (inner > 0 && arr[inner - 1] > temp)
{
arr[inner] = arr[inner - 1];
inner -= 1;
}
arr[inner] = temp;
this.DisplayElements();
}
}
#endregion