前言:工作的越久就觉得数据结构和算法等一些基础知识的重要性,尽管看了很多相关方面的技术书籍和博客,但是基本上就是过目就忘,而且很难坚持下去, 总结下来觉得还是要自己手动敲一边代码,并纪录性的写几篇博客加深印象,而且方便以后复习回顾。
排序的算法有很多,例如冒泡排序,快速排序,插入排序,归并排序,堆排序等; 作为第一篇数据结构和算法类的博客先从最简单也最为广为猿知的冒泡排序开始;
冒泡排序:码如起名,排序过程就像水中的气泡一样一步一步向上浮起,每次冒泡称为一趟;每一趟必然能确定一个元素的正确位置(能确定一个最大值或者最小值,这取决于按升序还是降序排列;每一趟要做的就是比较相邻的两个元素,按照规定的结果(升序 or 降序)来决定是否交换两个元素的位置;
若给含有n个整型元素的数组按照升序的方式进行冒泡排序,需要n-1趟,(因为每一趟都能确定一个元素的正确的位序 随意第n趟就没必要走下去);具体的代码如下(c# 实现):
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="SortList">需要排序的数组</param>
public static void BubbleSort(List<int> SortList)
{
if (SortList == null || SortList.Count <= 0)
{
return;
}
int count = SortList.Count;
for (int i = 0; i < count - 1; i++)
{
int last = count - i;
//for (int j = 0;j < count - 1; j++) // 减少每次循环次数
for (int j = 0; j < last - 1; j++) //因为每次排序后都必然有一个元素回归到正确的位置
{
if (SortList[j] < SortList[j + 1])
{
continue;
}
int temp = SortList[j];
SortList[j] = SortList[j + 1];
SortList[j + 1] = temp;
}
}
// WriteListToConsole(SortList); // 在控制台输出结果
}
时间复杂度:O(n²) 空间复杂度:0;
实际应用:适用于元素数量相对较小的情况的排序,因为时间复杂度比较大,实际很少使用;