一、C 程序实现
/******************************************************* * Description: 快速排序算法 * Author: shujuxiong * Version: 1.0 * Time: 2018-06-26 *******************************************************/ #include <stdio.h> //函数:打印数组 void PrintDataArray(int a[], int n) { for(int i=0; i<n; i++) printf("%d ",a[i]); printf("\n"); } //快速排序 void QuickSort(int a[], int left, int right) { //如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了 if(left >= right) return ; int i = left; int j = right; int tmp = a[i]; while(i < j) { //从右向左找小于基准值a[i]的元素 while(i<j && a[j]>=tmp) j--; //向前寻找 a[i] = a[j]; //挖出此数a[j]填到前一个坑a[i]中 //从左向右找大于基准值a[i]的元素 while(i<j && a[i]<=tmp) i++; //向后寻找 a[j] = a[i]; //挖出此数填到前一个坑a[j]中 } //将基准值填入最后的坑中 a[i] = tmp; //递归调用,分治法的思想 QuickSort(a, left, i-1); QuickSort(a, i+1, right); } //测试用例 int main() { int a[] = {3,1,7,5,2,4,9,6}; int len = sizeof(a)/sizeof(a[0]); QuickSort(a, 0, len-1); PrintDataArray(a, len); return 0; }运行结果:
二、Java 代码实现
/** * @description: 快速排序算法 * @author: shujuxiong * @version: 1.0 * @date: 2018-06-26 */ public class QuickSort { //快速排序 public static void sort(int[] a, int left, int right) { //如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了 if(left >= right) return ; int i = left; int j = right; int tmp = a[i]; while(i < j) { //从右向左找小于基准值a[i]的元素 while(i<j && a[j]>=tmp) j--; //向前寻找 a[i] = a[j]; //挖出此数a[j]填到前一个坑a[i]中 //从左向右找大于基准值a[i]的元素 while(i<j && a[i]<=tmp) i++; //向后寻找 a[j] = a[i]; //挖出此数填到前一个坑a[j]中 } //将基准值填入最后的坑中 a[i] = tmp; //递归调用,分治法的思想 sort(a, left, i-1); sort(a,i+1,right); } //方法:打印数组 private static void printDataArray(int[] a) { int N = a.length; for(int i = 0; i < N; i++) System.out.printf("%d ",a[i]); System.out.printf("\n"); } //测试用例 public static void main(String[] args) { int[] arr = {3,1,7,5,2,4,9,6}; int N = arr.length; sort(arr, 0, N-1); printDataArray(arr); } }代码实现:
三、Python 代码实现
# -*- coding: utf-8 -*- """ Description: 快速排序算法 Author: shujuxiong Version: 1.0 Date: 2018-06-26 """ import copy ##快速排序 def quickSort(relist, left, right): ##如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了 if left>=right: return i = left j = right tmp = relist[i] while(i<j): ##从右向左找小于基准值a[i]的元素 while i<j and relist[j]>=tmp: j -= 1 #向前寻找 relist[i] = relist[j] ##从左向右找大于基准值a[i]的元素 while i<j and relist[i]<=tmp: i += 1 #向后寻找 relist[j] = relist[i] ##将基准值填入最后的坑中 relist[i] = tmp ##递归调用,分治法的思想 quickSort(relist, left, i-1) quickSort(relist, i+1, right) return relist ##测序用例 def main(): mylist = [3,1,7,5,2,4,9,6] print(quickSort(copy.copy(mylist), 0, len(mylist)-1)) if __name__=='__main__': main()运行结果:
转载于:https://www.cnblogs.com/shujuxiong/p/9227252.html
相关资源:数据结构—成绩单生成器