基本排序算法
a表示要排序的数组,swap(a,i,j)表示最简单的数组内第i元素以及第j元素的交换。
冒泡排序
通过从数组最开始的两个数比较,每一次往后面比较并交换,记下下标并在排完之后交换,则一次循环之后最小的数字找到,整体减一,重复N次。
if(a == NULL || a.length < 2)//如果为空或者小于两个数则返回
return;
for(int end = a.length - 1;end > 0;end--)//外循环从最大开始
{
for(int i = 0;i < end; i++)//内循环从最小直到end
{
if(a[i]>a[i+1])
swap(a,i,i+1);//如果a[i]>a[i+1]的话交换他们的值直到最大的数被换到最后一位
}
}
可以知道冒泡排序的时间复杂度O( n 2 n^{2} n2)
选择排序
每次遍历找到最小的单位放在最前面,遍历个数减一,循环直到排序正确
for(int i = 0;i<a.length - 1;i++)//外循环循环整个数组一遍
{
int min = i;//随机设置最小
for(int j = i ;j < a.length;j++)//内循环从i的下一个开始比较
{
min = (a[j] > a[min]) ? min : j ;//寻找最小的数字并放在最前面
}
swap(a,min,i);
}
可以知道冒泡排序的时间复杂度O( n 2 n^{2} n2)
插入排序
类似于扑克牌,往已经排好的里面插入
for(int i = 1;i < a.length;i ++)//外循环遍从第二个开始历整个数组
for(int j = i - 1;j >= 0 && a[j] > a[j+1] ; j--)//内循环从第i-1个开始递减 如果递减的数少于0或者遇到比它大的都停止
{
swap(a,j+1,j);
}
可以知道插入排序的时间复杂度O( n 2 n^{2} n2)