procedure quicksort(a, left, right) if right > left select a pivot value a[pivotIndex] pivotNewIndex := partition(a, left, right, pivotIndex) quicksort(a, left, pivotNewIndex-1) quicksort(a, pivotNewIndex+1, right)
#include<stdio.h> #include<stdlib.h> //打印 voidshow(int *a,int length) { for (int i = 0; i < length; i++) { printf("%d\n", a[i]); } printf("---------------------------\n"); } //快速排序,不仅要写出来,而且要优美
//arr 为数组 //start 为开始的元素的下标 //end 为结束的元素的下标+1 voidquick_sort(int *arr, int start, int end) { if (start < end) //必须要开始的元素 <结束的元素才有意义。 { //赋值 int i = start; int j = end;
//i在++,j在--。第一个do为当i<j时就继续下去。 do { do//此do一直让i++,直到,发现大于start的 { i++; } while (i < end && arr[i] < arr[start]);
do//此do一直让j--,直到,发现小于start的元素 { j--; } while (j>start && arr[j]>arr[start]); //如果i<j,说明要将这两个元素交换 if (i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } while (i<j); //交换start和 j 。 到此为止, j之前为小于start元素的,j之后为大于start元素的。 int temp = arr[j]; arr[j] = arr[start]; arr[start] = temp;
#include<stdio.h> #include<stdlib.h> //打印 voidshow(int *a,int length) { for (int i = 0; i < length; i++) { printf("%d\n", a[i]); } printf("---------------------------\n"); } //快速排序,不仅要写出来,而且要优美
//arr 为数组 //start 为开始的元素的下标 //end 为结束的元素的下标+1 voidquick_sort2(int *arr, int start, int end) { if (start < end) { //start < end 才有进新下去的意义。 //i从第一个开始,记录下标。 int i = start; //从第二个元素开始,循环到末尾 for (int j = start+1; j < end; j++) { //一旦发现比其start小的 if (arr[j] > arr[start]) { //i++,很重要的一步,也就是让发现的小于start的数,依次放置在第2个,第3个....位置上。 i++; //交换 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } ////交换start和i 。 到此为止, i之前为小于start元素的,i之后为大于start元素的。 int temp = arr[i]; arr[i] = arr[start]; arr[start] = temp; //递归 quick_sort2(arr, start, i); quick_sort2(arr, i+1, end); } } voidmain() { int a[10] = { 1,3,2,4,9,2,6,5,4,8 }; show(a, 10); quick_sort2(a, 0,10); show(a, 10); system("pause"); }
JavaScript 语言实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
functionquickSort(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1)[0]; var left = []; var right = []; for (var i = 0; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); }