插入排序和希尔排序

来源:互联网 发布:淘宝部分退款在哪 编辑:程序博客网 时间:2024/05/20 06:55

插入排序是从将待排列的数组分成两列,待排列的无序区和排列好的有序区;

思想就是每次从无序区取出第一个数据插入到有序区的正确位置。

时间复杂度是n~n^2,平均是n^2,档大部分数据有序的时候,插入排序的速度会大大提升。

是稳定的排序算法。
void incert_sort(vector<int> input, int n)
{

for (int i = 1; i < n; i++)

{

int tmp = input[i];

int j = i-1;

while (j>=0 && input[j] < tmp)

{

input[j + 1] = input[j];

j--;

}

input[j + 1] = tmp;

}

}

希尔排序是插入排序的变种,通过改变步长,不断的实行步长下的简单插入排序。因为存在不相邻的元素交换,所以可能是不稳定的。

平均时间复杂度是nlogn,最坏是nlogn,因为与步长的选取有关,所以没有最优。



void shell_sort(vector<int> input, int n)

{

int d = n / 2;

while (d>0)

{

for (int i = d; i < n; i++)

{

int j = i - d;

int tmp = input[i];

while (j >= 0 && input[j]>tmp)

{

input[j + d] = input[j];

j = j - d;

}

input[j + d] = tmp;

}

}

}

0 0
原创粉丝点击