快速排序
来源:互联网 发布:数据对比用什么图表 编辑:程序博客网 时间:2024/04/30 14:47
思想:以某一元素为基准,将剩余元素拆分为大于该元素和小于该元素的两部分,然后再分别选取基准元素,重复拆分,知道该部分中剩余元素为一个。
#include <stdio.h>//输出void print(int array[], int size){int i = 0;for(i = 0; i < size; i++){printf("%d ", array[i]);}printf("\n");}//交换void swap(int *a, int *b){int temp = *a;*a = temp;*a = *b;*b = temp;}//以end下标元素为基准,拆分从start到end的序列为两部分int partition(int array[], int start, int end){int midVal = array[end]; //基准元素int i = 0;int len = end - start + 1;//遍历序列长度int index = start - 1; //标记交换位置for(i = start; i < end; i++){/* 小于基准元素的数在前半部分,大于基准元素的数在后半部分 (小于基准元素[start, x])(大于基准元素[x + 1, end - 1])(基准元素 [end]) */if(array[i] < midVal)//如果小于基准元素则需进行交换{index++;swap(&array[i], &array[index]);}}//将基准元素放到中间,如果全部小于基准元素,则基准元素位置不变//如果全部大于基准元素,则位置变为起始位置//其他在中间某位置//index是大于基准元素的第一个元素的下标swap(&array[index + 1], &array[end]);return index + 1;}void quickSort(int array[], int start, int end){int i = 0;if(end <= start){return;}else{i = partition(array, start, end); //返回索引//继续拆分,上一次基准元素已排好序,可忽略quickSort(array, start, i - 1); quickSort(array, i + 1, end);}}int main(){int array[] = {12, 4, 345, 65, 78, 23, 0, 54, 23, 56, 100};print(array, 11);quickSort(array, 0, 10);print(array, 11);}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- iOS存储的几种方式
- 财富赢家模拟炒股最新版分享,股市小散的利器
- 欢迎使用CSDN-markdown编辑器
- 拦截聊天记录--Hook技巧简介
- 记录一次linux错误的修复(linux启动出现UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY)
- 快速排序
- 4个易打动人的营销技巧
- 游戏新手引导的演进版
- 产品没有一炮而红,后面该怎么办?
- CubieBoard2 Ubuntu配置记录
- 最代码的要求-摘抄
- Android中内容观察者的使用---- ContentObserver类详解
- 编程面试的10大算法概念汇总
- Zookeeper 伪分布配置