常见排序算法:插入排序算法

基本思想:以第一个元素为基准,后面的元素依次与第一个元素比较,若比它大,则不执行操作,若比它小,则插入到它的左边。 

原理:

1.这里的第一个元素为12,因此以12作为基准,利用后面的元素与它进行比较。因此最外层循环应为for(i=1;i<length;i++)。当i=1时,比较a[i]和a[i-1],即与它前面的一个元素进行比较,若a[i]>a[i-1]则表明当前元素大于前一个元素,不执行任何操作。若a[i]<a[i-1]表明当前元素小于前一个元素,需要进行移动插入。此时将a[i]放入temp临时变量中。

2.此时进入第二层循环,j=i-1,该循环不断向左移动j,比较j中的元素a[j]与temp值,如果temp<a[j],则a[j+1] = a[j]。

3.内层循环第一轮结束,j--。j变为-1,跳出循环。此时a[j+1]=temp;

4.外层循环i++,i变为2。比较a[i]与a[i-1]。若a[i]<a[i-1]则将a[i]放入temp中。

5.进入内层循环for(j=i-1;j>00&&temp<a[j];j--) 中,将a[j]与temp比较。如果temp<a[j],则将a[j+1]=a[j]。

 

6。当j<0或者temp>a[j],则跳出循环,将temp变量放置在a[j+1]处。 

void InsertSort(int list[], int n)
{
	int j;
	for (int i = 1; i < n; i++)
	{
		if (list[i] < list[i - 1])
		{
			int temp = list[i];
			for (j = i - 1; j >= 0 && temp < list[j]; j--)
			{
				list[j + 1] = list[j];
			}
			list[j + 1] = temp;
		}
	}
}

int main()
{
	int list[] = { 12, 5, 4, 6, 7, 6, 1 };

	InsertSort(list, sizeof(list) / sizeof(int));

	for (int i = 0; i < sizeof(list) / sizeof(int); i++)
	{
		cout << list[i] << endl;
	}
}

插入排序是一种稳定的排序算法,最好情况下的时间复杂度:O(n),最坏情况下的时间复杂度为:O(n^{2}),平均情况下的时间复杂度为O(n^{2})。空间复杂度为O(1)

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章