冒泡排序
采用冒泡排序法,你既可以从大往小排序,也可以从小往大进行排序,这取决于里。当然了,二者代码稍有不同。本示例采用的是从大往小排。
原理
在一次遍历中经过交换,将最小的元素放在最后边,此时,最后一个元素是有序的,其他的认为是无序的。接着进行下一次遍历,将剩余元素中最小的放在倒数第二个位置,以此类推。
python3代码实现
def BubbleSort(listArr:list):
num=len(listArr)
for i in range(num-1):
for j in range(num-1-i):
if listArr[j]<listArr[j+1]:
listArr[j],listArr[j+1]=listArr[j+1],listArr[j]
return listArr
C#代码实现
namespace BubbleSort
{
class Program
{
static void Main(string[] args)
{
//测试
int[] Arr = new int[] { 8, 2, 5, 9, 7 };
BubbleSort(Arr);
foreach (int item in Arr)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
//排序算法
public static void BubbleSort(int[] Arr)
{
int num = Arr.Length;
for (int i = 0; i < Arr.Length - 1; i++)
{
for (int j = 0; j < Arr.Length-1-i; j++)
{
if (Arr[j]<Arr[j+1])
{
int temp = Arr[j];
Arr[j] = Arr[j + 1];
Arr[j + 1] = temp;
}
}
}
}
}
}
两种代码测试的都没有问题。
代码优化
当给这个算法一个数组时,算法是不知道数组是无序的还是有序的它都会进行遍历循环的。那么针对这点可以进行优化。先上优化后的代码(已C#为例),再进行说明。
namespace BubbleSort
{
class Program
{
static void Main(string[] args)
{
//测试
int[] Arr = new int[] { 8, 2, 5, 9, 7 };
BubbleSort(Arr);
foreach (int item in Arr)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
//排序算法
public static void BubbleSort(int[] Arr)
{
int num = Arr.Length;
bool Sorted=false; //数组是否有序
for (int i = 0; i < Arr.Length - 1; i++)
{
Sorted = true;
for (int j = 0; j < Arr.Length-1-i; j++)
{
if (Arr[j]<Arr[j+1])
{
int temp = Arr[j];
Arr[j] = Arr[j + 1];
Arr[j + 1] = temp;
Sorted = false; //只要进行交换了,就说明不是有序的
}
}
if (Sorted)
{
return;
}
}
}
}
}
如有不妥之处,敬请指正,谢谢