快速排序 VS compare排序

为了方便  ,我把bean写成了内部类

测试结论 ,快速排序吊打compare排序 ,可以自行测试

 1     //测试调用
 2     public static void main(String[] args) {
 3         List<Student> list = new ArrayList<Student>();
 4         new test().add(list);
 5         //记录旧数据  确定俩次排序使用的是同一数据
 6         List<Student> stus = new ArrayList<Student>();
 7         stus = list;
 8
 9         long aa = new Date().getTime();
10         quickSort(list, 0, list.size() - 1);
11         System.out.println("快速排序" + (new Date().getTime() - aa));
12
13         System.out.println();
14
15         aa = new Date().getTime();
16         Collections.sort(stus, new IndexComparator());
17         System.out.println("compare排序" + (new Date().getTime() - aa));
18     }
1 //创建100w条学生
2     public void add(List<Student> list) {
3         while (list.size() < 1000000) {
4             list.add(new Student((new Random().nextInt(1000000) + 1), ""));
5         }
6     }
 1 //快速排序
 2     public static void quickSort(List<Student> data, int left, int right) {
 3         Student temp = new Student();
 4         int f, rtemp, ltemp;
 5         ltemp = left;
 6         rtemp = right;
 7         f = data.get((left + right) / 2).getCount();
 8         while (ltemp < rtemp) {
 9             while (data.get(ltemp).getCount() < f) {
10                 ++ltemp;
11             }
12             while (data.get(rtemp).getCount() > f) {
13                 --rtemp;
14             }
15             if (ltemp <= rtemp) {
16                 temp = data.get(ltemp);
17                 data.set(ltemp, data.get(rtemp));
18                 data.set(rtemp, temp);
19                 --rtemp;
20                 ++ltemp;
21             }
22         }
23         if (left == rtemp) {
24             ltemp++;
25         }
26         if (left < rtemp) {
27             quickSort(data, rtemp + 1, right);
28         }
29         if (ltemp < right) {
30             quickSort(data, rtemp + 1, right);
31         }
32     }
 1     /**
 2      * compare排序
 3      */
 4     static class IndexComparator implements Comparator<Student> {
 5
 6         @Override
 7         public int compare(Student o1, Student o2) {
 8             Integer sort1 = o1.getCount();
 9             Integer sort2 = o2.getCount();
10             return sort1.compareTo(sort2);
11         }
12     }

实体Student

 1 static class Student {
 2         private int count;
 3
 4         private String name;
 5
 6         public int getCount() {
 7             return count;
 8         }
 9
10         public Student() {
11             super();
12             // TODO Auto-generated constructor stub
13         }
14
15         public Student(int count, String name) {
16             super();
17             this.count = count;
18             this.name = name;
19         }
20
21         public void setCount(int count) {
22             this.count = count;
23         }
24
25         public String getName() {
26             return name;
27         }
28
29         public void setName(String name) {
30             this.name = name;
31         }
32     }

时间: 2024-10-07 01:33:38

快速排序 VS compare排序的相关文章

算法有插入排序,堆排序,合并排序,快速排序和stooge排序

比较的算法有插入排序,堆排序,合并排序,快速排序和stooge排序, 先说一下比较结果 1,比较插入和stooge排序,stooge的表现如此之差,数组大小在2000时 InsertSort VS StoogeSort 's Running Time:     16ms:47672ms; Terribly! Isn't It? 所以在后面的比较中,没有带stooge这个垃圾算法 2,插入排序,堆排序,合并排序,快速排序运行时间对比 (网易博客的表格功能太差了,不爽,只好以文本对齐展现给大家了):

啊哈!算法之快速排序与桶排序

啊哈!算法之快速排序与桶排序 1.快速排序算法 快速排序由 C. A. R. Hoare(东尼·霍尔,Charles Antony Richard Hoare)在1960 年提出,之后又有许多人做了进一步的优化.在数列种随机找出一个基准数,因为数列是杂乱的,所以取首项为基准数.从后往前找到比基准数大的位置,再从前往后找到比基准数小的位置,交换元素:右游标向前移动与左游标向后移动,它们相遇时用基准数的位置与相遇的位置交换.此时原来数列以相遇的位置被划分为了两个需要排序的数列,再次执行上述过程:当左

排序:快速排序与选择排序

       在最近的学习中,对于排序算法进行了一定的学习,在这里对快速排序和选择排序的部分内容进行说明,其余内容在后期会进行补充,感谢大家提出宝贵意见. 宏定义如下: <strong><span style="font-size:18px;">#include <iostream> using namespace std; #define M 21 typedef int SqList[M];</span></strong>

HDU 1157 Who&#39;s in the Middle (快速排序 or 任意排序)

Who's in the Middle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9903    Accepted Submission(s): 4736 Problem Description FJ is surveying his herd to find the most average cow. He wants to k

快速排序和计数排序API

听说有十大排序算法,先学习一下快速排序和计数排序算法. 一:快速排序 快速排序主要就是每一个找到当前取出来的标尺的数的位置,然后把小于它的数放在左边(从小到大排),把大于它的数放在右边.然后利用递归分左右继续找位置放数字,这个过程有点类似之前的根据前序和中序找后序的题目.递归的出口就是当只有一个数的时候就不需要排了.取出来的位置就是他的位置. 代码: 找每一次的位置: int findpos(int l,int r){ int temp = data[l]; int i = l, j = r;

C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合

#include<iostream> #include<string> #define ml 10 using namespace std; typedef struct{//定义Data数据项 std::string name; long num; }Data; struct Link{//定义结构体 Data data[ml+1]; int length; }L; void initLink(Link *p){//初始化,即便有数据可以覆盖写入增加效率 p->length

JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序

1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把归并排序.快速排序.希尔排序.堆排序放在一起比较,是因为它们的平均时间复杂度都为 O(nlogn). 请大家带着问题:快排和归并用的都是分治思想,递推公式和递归代码也非常相似,那它们的区别在哪里呢 ? 来阅读下文. 2. 归并排序(Merge Sort) 思想 排序一个数

数据结构学习笔记06排序 (快速排序、表排序)

1.快速排序 不稳定 分而治之 找主元pivot,小于主元划分为一个子集,大于主元的划分为一个子集 然后进行递归 最好情况:每次主元正好中分,T(N) = O( NlogN ) 选主元 的方法有很多,这里用 取头.中.尾的中位数. 直接选A[0]为pivot,时间复杂度T ( N ) = O( N ) + T ( N–1 ) = O( N ) + O ( N–1 ) + T( N–2 ) = = O( N ) + O ( N–1 ) + …+ O( 1 ) = O( N^2 ) 随机取pivot

第五讲.字典,集合,数组排序(快速排序,冒泡,默认排序)(源代码)

1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 6 //字典的使用 7 8 //创建字典对象 9 NSDictionary * a1 = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"