排序算法之插入排序
插入排序的原理:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素小于前面的元素(已排序),则依次与前面元素进行比较如果小于则交换,直到找到大于该元素的就则停止;
- 如果该元素大于前面的元素(已排序),则重复步骤2
- 重复步骤2~4 直到所有元素都排好序 。
代码实现Java(从小到大):
public static void InsertionSort(int[] array)
{
int n = array.Length;
//从第二个元素开始
for (int i = 1; i < n; i++)
{
//从第i个元素开始,一次和前面已经排好序的i-1个元素比较,如果小于,则交换
for (int j = i; j > 0; j--)
{
if (array[j]<array[j - 1])
{
Swap(array, j, j - 1);
}
else//如果大于,则不用继续往前比较了,因为前面的元素已经排好序,比较大的大就是教大的了。
break;
}
}
}
private static void Swap(int[] array, int i, int min)
{
T temp = array[i];
array[i] = array[min];
array[min] = temp;
}
总结:
插入排序:时间复杂度最好n,最差n2,稳定排序