算法之快速排序
代码实现一维数组的快速排序
C语言
#include <stdio.h>
#include <time.h>
// 排序前数组
int array[20] = { 20, 7, 1, 12, 6, 9, 26, 33, 13, 47 , 88, 17, 1, 12, 6, 9, 26, 63, 72, 47 };
// 用于打印数组
void visitArray(int array[])
{
int i;
for (i = 0; i < 20; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
// 基于冒泡法改进的,快速排序
void quicksort(int left, int right) {
int i, j, t, temp;
if (left > right)
{
return;
}
temp = array[left]; // 基准数
i = left;
j = right;
while (i != j) { // 要先从右边开始找
while (array[j] >= temp && i < j)
j--;
while (array[i] <= temp && i < j)
i++;
if (i < j)
{
t = array[i];
array[i] = array[j];
array[j] = t;
}
}
// 将基准数还原
array[left] = array[i];
array[i] = temp;
quicksort(left, i - 1); // 左边递归
quicksort(i + 1, right); // 右边递归
}
int main()
{
printf("排序前的数组:\n");
visitArray(array);
quicksort(0, 19);
printf("排序后的数组:\n");
visitArray(array);
// 防止控制台消失
getchar();
return 0;
}
JavaScript
function visit (array) {
var str = "";
for (var i = 0; i < array.length; i++) {
str += array[i] + " ";
}
console.log(str);
}
function quick_sort(array, left, right){
var i = left;
var j = right;
var key = array[left]; // 标准值
if(left >= right){
return;
}
while(i < j){
while(array[j] > key && i < j){ //从右边向左找第一个比key小的数,跳出循环
j--;
}
// 这里的 <= 号保证结束了key的位置不变
while(array[i] <= key && i < j){ //从左边向右找第一个比key大的数,跳出循环
i++;
}
if(i < j){
//交换
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
array[left] = array[i];
array[i] = key;
quick_sort(array, left, i - 1);
quick_sort(array, i + 1, right);
}
var array = [20, 7, 1, 12, 6, 9, 26, 33, 13, 47 , 88, 17, 1, 12, 6, 9, 26, 63, 72, 47];
console.log("排序前的数组:");
visit(array);
quick_sort(array, 0, array.length - 1);
console.log("排序后的数组:");
visit(array);
O(∩_∩)O~~