void print(int a[], int n ,int i){ cout<= 1) { ShellInsertSort(a, num, dk); dk /= 2; } } //简单选择排序 void SimpleSelectSort(int a[], int num) { for (int i=0; i a[k]) { minNum = a[k]; pos = k; } } if (pos != -1) { a[pos] = a[i]; a[i] = minNum; } print(a, num, i); } } //双向选择排序 void SelectionExSort(int a[], int num) { for (int i=1; i<=num/2; i++) { int maxPos = i-1; int minPos = num-i; for (int k=i+1; k a[k]) { minPos = k; } } if (a[minPos] < a[i-1]) { swap(a[minPos], a[i-1]); } if (a[maxPos] > a[num-i]) { swap(a[maxPos], a[num-i]); } print(a, num, i); } } //冒泡排序 void BubbleSort(int a[], int num) { for (int i=0; i a[k+1]) { swap(a[k], a[k+1]); } } print(a, 10, i); } } //简化冒泡排序,如果之后有序,不在排列 void BubbleSort_1(int a[], int num) { int endPos = num-1; int i = 0; while (endPos > 0) { int pos = 0; for (int k=0; k a[k+1]) { pos = k; swap(a[k], a[k+1]); } } endPos = pos; print(a, 10, i++); } } //双向冒泡排序 void BubbleSort_2(int a[], int num) { int lowPos = 0; int highPos = num-1; int k; int i = 0; while (lowPos < highPos) { for (k=lowPos; k a[k+1]) { swap(a[k], a[k+1]); } } highPos--; print(a, 10, i); for (k=highPos; k>lowPos; k--) { if (a[k] < a[k-1]) { swap(a[k], a[k-1]); } } lowPos++; print(a, 10, i++); } } static int i = 0; //快速排序 void QuickSort(int a[], int low, int high) { if (low >= high) { return; } int first = low; int last = high; int key = a[low]; while (first < last) { while (first < last && a[last] >= key) { last--; } a[first] = a[last]; while (first < last && a[first] <= key) { first++; } a[last] = a[first]; } a[first] = key; print(a, 10, i++); QuickSort(a, low, first-1); QuickSort(a, first+1, high); } //归并排序 void Merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex) { int i = startIndex,j=midIndex+1,k = startIndex; while(i!=midIndex+1 && j!=endIndex+1) { if(sourceArr[i]