赞
踩
先给出要排序的数据
int arr[] = {5, 3, 9, 8,6,2,4,7, 1 };
int n =sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = n-1;
void InsertSort(int *arr, int left, int right) { for(int i=left+1; i<=right; ++i)//要插入的元素个数 { int j = i; while(j>left && arr[j]<arr[j-1]) { Swap(&arr[j], &arr[j-1]);//交换两个数的函数就不在此展示了 j--; } } } / 可以不用交换数据,而用一块临时空间来保存要插入的数据,然后通过数据的覆盖,从而找到要插入的位置 void InsertSort_1(int *arr, int left, int right) { for(int i=left+1; i<=right; ++i)//要插入的元素个数 { int j = i; int tmp = arr[j]; while(j>left && tmp<arr[j-1]) { arr[j] = arr[j-1]; j--; } arr[j] = tmp; } } // 也可以采用哨兵位的方法来排序,哨兵位:即通过多一块空间(arr[0])来保存数据,然后利用哨兵位的特性来控制循环的结束 不过如果要用哨兵位,必须将数组的大小给多一个,让arr[0]来充当哨兵位。 即给出这么多数据 int arr[] = { 0,5, 3, 9, 8,6,2,4,7, 1}; 要排序的位置是从1到n-1,留出一个位置来充当哨兵位。 void InsertSort(int*arr, int left, int right) { for (int i = left+1; i <= right; i++) { int j = i; arr[0] = arr[j]; while (arr[j] < arr[j - 1]) { arr[j] = arr[j - 1]; j--; } arr[j] = arr[0]; } }
void BinInsertSort(int *arr, int left, int right) { for(int i=left+1; i<=right; ++i) { int tmp = arr[i]; int low = left; int high = i-1; int mid; while(low <= high) { mid = (low+high)/2; if(arr[i] >= arr[mid]) low = mid+1; if( arr[i] < arr[mid]) high = mid-1; } for(int j=i; j>low; --j) { arr[j] = arr[j-1]; } arr[low] = tmp; } }
void TwoW
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。