溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

常見排序算法之插入排序

發布時間:2020-08-06 06:52:14 來源:網絡 閱讀:337 作者:duanjiatao 欄目:編程語言

常見排序算法之插入排序

常見排序算法之插入排序


1.直接插入排序

直接插入排序(Insertion Sort)的基本思想是:每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子序列中的適當位置,直到全部記錄插入完成為止。

設數組為a[0…n-1]。

1.      初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

2.      將a[i]并入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

3.      i++并重復第二步直到i==n-1。排序完成。

代碼如下:

void InsertSort(int* a, size_t n)  //直接插入排序
{
	assert(a);
	for (int i = 1; i < n; ++i)
	{
		int tmp = a[i];
		int j = i - 1;
		while (j >= 0 && a[j] > tmp)
		{
			a[j + 1] = a[j];
			--j;
		}
		a[j + 1] = tmp;
	}
}


2.希爾排序

該方法的基本思想是:先將整個待排元素序列分割成若干個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然后依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠?。r,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。

void shellsort2(int a[], int n)
{
	int j, gap;
	
	for (gap = n / 2; gap > 0; gap /= 2)
		for (j = gap; j < n; j++)//從數組第gap個元素開始
			if (a[j] < a[j - gap])//每個元素與自己組內的數據進行直接插入排序
			{
				int temp = a[j];
				int k = j - gap;
				while (k >= 0 && a[k] > temp)
				{
					a[k + gap] = a[k];
					k -= gap;
				}
				a[k + gap] = temp;
			}
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女