排序算法C/C++实现_快速排序(Quick Sort)
2014-04-18 09:48
323 查看
快速排序是对气泡排序(Bubble Sort)的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对两个部分记录继续进行排序,以打到整个序列有序。(数据结构,严蔚敏)
算法实现:#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int Partition(int *arr, int low, int high) {
int randomIndex = low + rand() % (high - low + 1); //产生随机位置作为枢轴,防止对有序序列排序时速度过慢
int temp = arr[low];
arr[low] = arr[randomIndex];
arr[randomIndex] = temp;
int pivotkey = arr[low];
while(low < high) {
while(low < high && arr[high] >= pivotkey) --high;
if(low < high)
arr[low] = arr[high];
while(low < high && arr[low] <= pivotkey) ++low;
if(low < high)
arr[high] = arr[low];
}
arr[low] = pivotkey;
return low;
}
void QuickSort(int *arr, int s, int e) {
if(s < e) {
int low = Partition(arr, s, e);
QuickSort(arr, s, low-1);
QuickSort(arr, low+1, e);
}
}
int main() {
int N = 0;
while(scanf("%d",&N) != EOF) { //首先输入待排序序列个数
int *arr = (int *)malloc(sizeof(int) * N);
for(int i=0; i<N; ++i) {
scanf("%d",&arr[i]); //依次输入每个带排序元素
}
QuickSort(arr, 0, N-1);
for(int i=0; i<N; ++i) {
printf("%d ",arr[i]);
}
printf("\n");
free(arr);
}
return 0;
}
相关文章推荐
- Quick Sort 快速排序的原理及实现
- 交换排序—快速排序(Quick Sort)原理以及Java实现
- PHP实现排序算法----快速排序(Quick Sort)、快排
- 非递归实现快速排序
- 数组的快速排序(使用栈的非递归实现)
- Python实现快速排序
- python 三行代码实现快速排序
- Python实现快速排序
- 一种简单的用java实现快速排序(Quicksort)
- c++快速排序的实现
- 快速排序详解以及java实现
- 快速排序详解及JAVA/C++实现
- 快速排序及其java实现代码
- java代码实现快速排序
- c++实现快速排序
- quick sort 快速排序
- 快速排序Java实现
- 如何利用C语言中的qsort库函数实现快速排序?
- 关于快速排序——Java实现
- java快速排序实现