快排C++版
#include快排Python版using namespace std;// arr 是一个二维数组// arr 需要排序arr的开始位// arr 需要排序arr的结束位// x 表示要比较的二维数组的维void qsort(int arr[][2], int start, int end, int x){ int i = start; // 用i, j相当于保留原始的start,end,下面会用到边界 int j = end; int key = arr[i][x]; int t0, t1; while (i < j) { // 向左移动直到位置j的值小于key while ((key <= arr[j][x]) && (i < j)) { j -= 1; } // 出现小于key的j时,交换arr[i] 和arr[j] 的值 t0 = arr[i][0]; t1 = arr[i][1]; arr[i][0] = arr[j][0]; arr[i][1] = arr[j][1]; arr[j][0] = t0; arr[j][1] = t1; // 向右移动直到位置i的值大于key while ((key >= arr[i][x]) && (i < j)) { i += 1; } // 出现大于key的i时,交换arr[i] 和arr[j] 的值 t0 = arr[i][0]; t1 = arr[i][1]; arr[i][0] = arr[j][0]; arr[i][1] = arr[j][1]; arr[j][0] = t0; arr[j][1] = t1; } // 以上代码到这儿,位置i == j的那个值就永远固定了,他左侧的数都比他小,右侧的数都比他大 if (i > start) { // 递归对左侧数据排序 qsort(arr, start, i - 1, x); } if (j < end) { // 递归对右侧数据排序 qsort(arr, j + 1, end, x); }}int main(){ int arr[12][2] = { {1,3}, {2,5}, {3, 1}, {4,3}, {5,14}, {6, 1}, {7,3}, {8,4}, {9, 1}, {10,11}, {11,4}, {12, 1}}; int len = 12; // 排序前输出 for(int i = 0; i < len; i++) { cout< <<" "< <
'''Created on 2013-9-3@author: gudh'''def qsort(arr, start, end, x): i = start j = end key = arr[i][x] while i < j: while key <= arr[j][x] and i < j: j -= 1 t = arr[i] arr[i] = arr[j] arr[j] = t while key >= arr[i][x] and i < j: i += 1 t = arr[i] arr[i] = arr[j] arr[j] = t if i > start: qsort(arr, start, i - 1, x) if j < end: qsort(arr, j + 1, end, x)if __name__ == '__main__': arr = [] import random for i in range(1000): arr.append((i, random.random())) print arr qsort(arr, 0, len(arr) - 1, 1) print arr for i in range(99): if arr[i][1] > arr[i+1][1]: print i,arr[i], arr[i+1], False