voidinsertSort(int array[], int left, int right){ if (left >= right) return; for (int i = left+1; i <= right; i++) { int preIndex = i - 1; int curValue = array[i]; while (preIndex >= 0 && curValue < array[preIndex]) { array[preIndex+1] = array[preIndex]; preIndex--; } array[preIndex+1] = curValue; } }
冒泡排序: 嵌套循环,每次查看相邻的元素如果逆序,则交换
1 2 3 4 5 6 7 8 9 10
voidbubbleSort(int array[], int left, int right){ if (left >= right) return; for (int i = left; i <= right; i++) { for (int j = left; j <= right-i-1; j++) { if (array[j] > array[j+1]) { swap(array[j], array[j+1]); } } } }
// 使用stl提供的容器 voidheap_sort(int a[], int len){ std::priority_queue<int, std::vector<int>, greater<int>> q; for (int i = 0; i < len; i++) { q.push(a[i]); } for (int i = 0; i < len; i++) { a[i] = q.top(); q.pop(); } } // 不使用stl提供的容器 voidheapify(int array[], int len, int i){ int left = 2*i+1, right = 2*i+2; int largest = i; if (left < len && array[left] > array[largest]) { largest = left; } if (right < len && array[right] > array[largest]) { largest = right; } if (largest != i) { swap(array[largest], array[i]); heapify(array, len, largest); } }
voidheapSort(int array[], int left, int right){ if (left >= right) return; int len = right - left + 1; for (int i = len/2-1; i >= 0; i--) { heapify(array, len, i); } for (int i = len-1; i >= 0; i--) { swap(array[0], array[i]); heapify(array, i, 0); } }