3.排序--快速排序
2012-09-13 17:12
155 查看
C语言版本:
Java 版本:
/*快速排序 2012.2.25*/ #include <stdio.h> int partion(int a[],int low,int high) //返回枢轴位置 { int i=low; int j=high; int pivot=a[low]; while(i<j) { while(i<j&&a[j]>=pivot) { --j; } a[i]=a[j]; while(i<j&&a[i]<=pivot) { ++i; } a[j]=a[i]; } a[i]=pivot; return i; } void quickSort(int a[],int low,int high) //快速排序 { if(low<high) { int pivotpos=partion(a,low,high); quickSort(a,low,pivotpos-1); quickSort(a,pivotpos+1,high); } } int main(int argc, char *argv[]) { int n; while(scanf("%d",&n)!=EOF) { int i; int *a=new int ; for(i=0;i<n;i++) { scanf("%d",&a[i]); } quickSort(a,0,n-1); for(i=0;i<n;i++) { printf("%d ",a[i]); } printf("\n"); } return 0; }
Java 版本:
package algorithm.sort; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; import java.util.Deque; import java.util.LinkedList; import time.Timing; public class QuickSort{ public <T extends Comparable<T>> void quickSort1(ArrayList<T> arr,int l,int u){ if (l>=u) { return; } int m=l; for (int i = l+1; i <= u; i++) { if (arr.get(i).compareTo(arr.get(l))<0) { Collections.swap(arr, ++m, i); } } Collections.swap(arr, l, m); quickSort1(arr, l, m-1); quickSort1(arr, m+1, u); } public <T extends Comparable<T>> void quickSort2(ArrayList<T> arr,int l,int u){ if (l>=u) { return; } T temp=arr.get(l); int i=l; int j=u; while(i<j){ for (; i < j && arr.get(j).compareTo(temp)>=0; j--); for (; i < j && arr.get(i).compareTo(temp)<=0; i++); if (i>j) { break; } Collections.swap(arr, i, j); } Collections.swap(arr, j, l); quickSort2(arr, l, j-1); quickSort2(arr, j+1, u); } public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<Integer> arr=new ArrayList<Integer>(); QuickSort qs=new QuickSort(); try { FileOutputStream fos = new FileOutputStream("D:\\workspace\\DataStructures\\src\\algorithm\\sort\\rank_data.txt"); OutputStreamWriter w = new OutputStreamWriter(fos, "UTF-8"); InputStreamReader fr = new InputStreamReader( new FileInputStream("D:\\workspace\\DataStructures\\src\\algorithm\\sort\\random_data.txt")); BufferedReader br = new BufferedReader(fr); String line = null; while ((line = br.readLine()) != null) { arr.add(Integer.parseInt(line)); } Timing sorTimer = new Timing(); double timeInSec; sorTimer.start(); qs.quickSort2(arr, 0, arr.size() - 1); timeInSec = sorTimer.stop(); for (int i : arr) { w.write(i + "\n"); } System.out.println(timeInSec); br.close(); fr.close(); w.close(); fos.close(); } catch (IOException e) { // TODO: handle exception } } }
相关文章推荐
- 20180316交换排序-快速排序
- 数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
- Java基础知识强化56:经典排序之快速排序(QuickSort)
- Java数据结构与算法(18) - ch07高级排序(快速排序)
- 算法分析与设计实验 分治策略 两路合并排序和快速排序
- 排序--选择排序,插入排序,冒泡排序,shell排序,快速排序(递归,迭代,改进版本),归并排序
- 数据结构和算法系列5 七大排序之冒泡排序和快速排序
- HNUST 1395日期排序 sort函数 快速排序
- 排序算法之快速排序
- java 冒泡排序,选择排序,插入排序,快速排序
- 排序----插入排序,二路归并排序,堆排序,快速排序
- 数据结构与算法——冒泡排序、选择排序和快速排序
- python中实现二分查找,插入排序,归并排序,快速排序
- 插入排序、合并排序、堆排序和快速排序
- 排序之快速排序(下)
- Java-冒泡排序、快速排序、插入排序、快速排序
- 排序——快速排序
- 数据结构和算法-011 数组排序 快速排序
- js原生排序和快速排序方法
- 排序算法之快速排序