#include <iostream> using namespace std; const int MAXSIZE = 100; typedef struct SQlist { int arr[MAXSIZE]; int Len; } SQlist; bool Init_SQlist(SQlist &space) { memset(space.arr, 0, sizeof(space.arr)); space.Len = 0; return true; } bool EnSQlist(SQlist &space) { space.Len = 10; for (int i = 0; i < space.Len; ++i) { space.arr[i] = rand() % 100; } return true; } bool Merge(SQlist &space, int left, int mid, int right) { int Length = (right - left) + 1; int *pData = new int[Length]; memset(pData, 0, sizeof(int) * Length); int low = left; int hig = mid + 1; int Index = 0; while (low <= mid && hig <= right) { while (low <= mid && space.arr[low] <= space.arr[hig]) { pData[Index++] = space.arr[low++]; } while (hig <= right && space.arr[hig] < space.arr[low]) { pData[Index++] = space.arr[hig++]; } } while (low <= mid) { pData[Index++] = space.arr[low++]; } while (hig <= right) { pData[Index++] = space.arr[hig++]; } memcpy(&space.arr[left], pData, sizeof(int) * Length); return true; } bool Merger_sort(SQlist &space, int left, int right) { if (left >= right) return true; else { int mid = ((right - left) >> 1) + left; Merger_sort(space, left, mid); Merger_sort(space, mid + 1, right); Merge(space, left, mid, right); } } bool print(SQlist &space) { for (int i = 0; i < space.Len; ++i) { if (i == 0) cout << space.arr[i]; else cout << " " << space.arr[i]; } cout << endl; return true; } int main() { srand(time(NULL)); SQlist space; Init_SQlist(space); EnSQlist(space); print(space); Merger_sort(space, 0, space.Len - 1); print(space); cin.get(); return 0; }