//插入排序 O(n2) 80000-9.869s
//把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表只包含一个元素,即数组的第一个元素,无序表中有n-1个元素
//无序表中取出第一个元素,把它依次与有序表中元素进行对比,插入到有序表中适当位置,成为新的有序表
//---------------------------------------------------------------------------------------------------------------------
void InsertSort(int arr[], int length)
{
int insertVal=0;
int insertIndex=0;
for (int i = 1; i < length; i++)
{
insertVal = arr[i];
insertIndex = i - 1; //插入到前面0~i-1个下标中,包括其本身
while (insertIndex >= 0&&insertVal<arr[insertIndex])
{
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
if (insertIndex + 1 != i)
{
arr[insertIndex + 1] = insertVal;
}
}
//for (int i = 0; i < length; i++)
//{
// cout << arr[i] << " ";
//}
}
int main()
{
srand((unsigned int)time(NULL));
default_random_engine e;
uniform_real_distribution<double>u(0, 1);
int arr[80000];
int length = 80000;
for (size_t i = 0; i < 80000; i++) //12.394
{
arr[i] = u(e) * 800000;
}
start = clock();
InsertSort(arr, length);
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK;
cout << duration << endl;
//int arr[] = { 10,3,5,7,8,2,4,1,0 };
//int length = 9;
//InsertSort(arr, length);
system("pause");
return 0;
}