快速排序
2017-12-20 21:51
134 查看
#include<stdio.h> int a[100]; int n; void quicksort( int left,int right ); int main() { int i,j; scanf( "%d",&n ); for( i = 0;i < n;i++ ) { scanf( "%d",&a[i] ); //输入数据 } quicksort( 0,n-1 ); //快排 for( i = 0;i < n;i++ ) { printf( "%d ",a[i] ); } printf( "\n" ); return 0; } void quicksort( int left,int right ) { int i,j,t,tmp; if( left > right ) { return ; } tmp = a[ left ]; //将最左元素当做比较基准 i = left; j = right; while( i != j ) { while( a[j] >= tmp && i < j ) //一定是j先移动 { j--; } while( a[i] <= tmp && i < j ) { i++; } if( i < j ) { t = a[i]; a[i] = a[j]; a[j] = t; } } a[ left ] = a[i]; //基准归位 a[i] = tmp; quicksort( left,i-1 ); quicksort( i+1,right ); return ; }
为什么一定是j先移动呢?
例如:
2 5 3
a[ left ] 是2,i 指向5,j 指向3,如果i先移动,就会破坏i < j 的条件
这样本来你这次交换应该是i 指向2不变,但是j 先移动就会将2 5交换了
相关文章推荐
- 自娱自乐之快速排序
- 快速排序 php实现 算法学习
- 一幅图说明快速排序
- 快速排序java实现
- C语言排序实例(选择、冒泡、插入、折半、快速)
- 快速排序Java(时间、空间复杂度)
- 快速排序
- c++快速排序的过程
- 几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、拆半插入排序、简单选择排序)
- python3 快速排序
- 快速排序-java实现
- 用Java泛型实现快速排序
- 基础算法之四--排序:之快速排序
- 第16周 项目1-快速排序
- 快速排序详解
- 快速排序的两种改进方法算法及topK问题求解
- 数据可视化作业一: 快速排序加返回第n个最大的值
- 《算法导论》第7章 快速排序 (四种变形)
- 快速排序,一个爱情故事-java版
- 【白话经典算法系列之六】 快速排序 快速搞定