目录
1最基础的算法--swap(交换)
1.1 C语言宏函数
#define SWAP(a,b,temp) ((temp = a),(a = b),(b = temp))
1.2 C++模版函数
template<class T>
void swap(T& a, T& b)
{
T temp;
temp = a;
a = b;
b = temp;
}
2最简单的算法--BubbleSort(冒泡算法)
从左到右扫描数据,选择最大的数据放到右边。要点为比较相邻的两个数,如果左边的数大于右边的数就进行交换。
template<class T>
void BubbleSort(T list[], const int len)
{
for (int i = 0;i < len - 1;i++)
{
for (int j = 0;j < len - i - 1;j++)
{
if (list[j] > list[j + 1])
swap(list[j], list[j + 1]);
}
}
}
冒泡排序需要进行list长度减一次扫描,每次扫描需要进行list长度减去扫描轮次加一次比较,由程序代码不难看出,冒泡的时间复杂度为O()。
3SelectionSort(选择排序)
从当前未排序的数据中找到一个最小的,将它放在已排序的列表最后/前。
template<class T>
void SelectionSort(T* list, const int len)
{
for (int i = 0;i < len - 1;i++)
{
int min = i;
for (int j = i + 1;j < len;j++)
{
if (list[j] < list[min])
min = j;
}
swap(list[i], list[min]);
}
}
从左开始扫描,扫描过程中记录其中最小值,待扫描结束与未排序的第一个进行交换,相较于冒泡排序,交换次数减少。可看出时间复杂度为O()。