算法一 快速排序 发表于 2017-12-03 | 更新于: 2019-10-26 | 分类于 Algorithm | | 阅读次数: 1. 分析 2. 伪代码 3. 思路图 4. 运行过程 5. 代码5.1 C++版本/********************************** 日期:2014-04-01* 作者:SJF0115* 题目:快速排序**********************************/#include <iostream>#include <stdio.h>using namespace std;//对子数组array[p...r]就地重排int Partition(int array[],int p,int r){ int j,temp; //定义哨兵 int x = array[r]; //i为小于哨兵元素的最后一个元素下标 int i = p - 1; //j为待排序元素的第一个元素 for(j = p;j < r;j++){ //跟哨兵比较 if(array[j] < x){ i++; //交换array[i] array[j] temp = array[j]; array[j] = array[i]; array[i] = temp; } } //交换array[i+1](大于哨兵元素的第一个元素) array[r] temp = array[i+1]; array[i+1] = array[r]; array[r] = temp; //返回分割下标 return i + 1;}//快排void QuickSort(int array[],int p,int r){ if(p >= r || array == NULL){ return; } int index = Partition(array,p,r); QuickSort(array,p,index-1); QuickSort(array,index+1,r);}int main(){ int array[] = {2,8,7,1,3,5,6,4}; QuickSort(array,0,7); for(int i = 0;i <= 7;i++){ printf("%d\n",array[i]); }} 5.2 Java版本package com.sjf.open;/** 快速排序 * @author sjf0115 * @Date Created in 下午5:24 18-3-27 */public class QuickSort { /** * 分割点 * @param array * @param start * @param end * @return */ int partition(int array[], int start, int end){ int x = array[end]; int i = start - 1; int tmp; for(int j = start;j < end;j++){ if(array[j] < x){ i++; tmp = array[j]; array[j] = array[i]; array[i] = tmp; } } tmp = array[i+1]; array[i+1] = array[end]; array[end] = tmp; return i+1; } /** * 快速排序 * @param array * @param start * @param end */ void quickSort(int array[], int start, int end){ if(start > end || array == null){ return; } int index = partition(array, start, end); quickSort(array, start, index-1); quickSort(array, index+1, end); } public static void main(String[] args) { QuickSort quickSort = new QuickSort(); int array[] = {4,1,6,3,9,0}; quickSort.quickSort(array, 0, 5); for(int num : array){ System.out.println(num); } }} 赏几毛白! 打赏 微信支付 支付宝 本文作者: sjf0115 本文链接: http://smartsi.club/algorithm-quick-sort.html 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!