【複習】手寫數據結構之插入排序

 思路:希爾排序是對插入排序的一個改進。插入排序適用於小數據,且儘可能有序的數據;

希爾排序將數據分組,進行排序,再合併進行排序。大大提高了插入排序的效率;

#include <stdio.h>
#include <stdlib.h>

void insertSort(int*arr ,int length)
{
	int tempData = 0;
	int j;
	for (int i = 0; i < length-1; ++i)
	{
		if (arr[i + 1] > arr[i])
		{
			tempData = arr[i + 1];
			for ( j = i + 1; j > 0 && tempData > arr[j - 1] ; --j)
			{

				arr[j] = arr[j - 1];
			}

			arr[j] = tempData;

		}

	}
}


void shellSort(int* arr, int length)
{
	int incresment = length;
	do
	{
		int tempData = 0;
		int k;
		//確定分組增量 
		incresment = incresment / 3 + 1;
		for (int i = 0; i<incresment; ++i)
		{
			for (int j = i+incresment; j<length; j+=incresment)
			{
				if (arr[j] < arr[j - incresment])
				{
					tempData = arr[j];
					for ( k = j-incresment; k>0 && arr[k] > tempData; k-=incresment)
					{
						arr[k+incresment] = arr[k];
					}

					arr[k+incresment] = tempData;
				}
			}


		}

	} while (incresment > 1);

}


int main()
{


	int arr[8] = { 1, 3, 4, 5, 7, 8, 6, 5 };
	for (int i = 0; i < 8; ++i)
		printf("%d ", arr[i]);
	printf("\n");

	printf("---------排序後-------\n");
	shellSort(arr, 8);

	for (int i = 0; i < 8; ++i)
		printf("%d ", arr[i]);

	printf("\n");




	system("pause");
	return 0;
}

 

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