常用排序--冒泡/快速排序
2016-02-01 00:00
295 查看
冒泡排序是两个相临位置的数据进行比较,按照逻辑从大到小还是从小到大进行调换,确定一个数字为一趟.
•若文件初状为正序,则一趟起泡就可完成排序,排序码的比较次数为n-1,且没有记录移动,时间复杂度是O(n)
•若文件初态为逆序,则需要n-1趟起泡,每趟进行n-i次排序码的比较,且每次比较都移动三次,比较和移动次数均达到最大值∶O(n2)
•起泡排序平均时间复杂度为O(n2)
快速排序
快速排序是不稳定的排序。
快速排序的时间复杂度为O(nlogn)。
当n较大时使用快排比较好,当序列基本有序时用快排反而不好。
最坏情况O(n^2)
最好情况
平均时间复杂度是O(nlogn)
•若文件初状为正序,则一趟起泡就可完成排序,排序码的比较次数为n-1,且没有记录移动,时间复杂度是O(n)
•若文件初态为逆序,则需要n-1趟起泡,每趟进行n-i次排序码的比较,且每次比较都移动三次,比较和移动次数均达到最大值∶O(n2)
•起泡排序平均时间复杂度为O(n2)
public class Maopao { public static void main(String[] args) { int [] target={5,3,4,2,11,8,7}; int t =0; int length = target.length; for(int i=0;i<length-1;i++){ for(int j=0;j<length-1;j++){ if(target[j]<target[j+1]){ t=target[j]; target[j]=target[j+1]; target[j+1]=t; } } System.out.println("第"+(i+1)+"趟排序结果"); for(int sig1=0;sig1<target.length-1;sig1++){ System.out.print(target[sig1]+"\t"); } System.out.println(""); } System.out.println("*********************最后结果*****************"); for(int b:target){ System.out.print(b+"\t"); } } }
第1趟排序结果 5 4 3 11 8 7 第2趟排序结果 5 4 11 8 7 3 第3趟排序结果 5 11 8 7 4 3 第4趟排序结果 11 8 7 5 4 3 第5趟排序结果 11 8 7 5 4 3 第6趟排序结果 11 8 7 5 4 3 *********************最后结果***************** 11 8 7 5 4 3 2
快速排序
public class KuaiPai { public static void main(String[] args) { int[] target={24,3,12,22,11,15,6}; quickSort(target,0,target.length-1); for(int a:target){ System.out.print(a+"\t"); } } private static void quickSort(int[] a, int low, int high) { if(low<high){ //如果不加这个判断递归会无法退出导致堆栈溢出异常 int middle = getMiddle(a,low,high); //递归调用 quickSort(a, 0, middle-1);//基数左边 quickSort(a, middle+1, high);//基数右边 } } public static int getMiddle(int[]a,int left,int right){ int tmp = a[left]; while(left<right){ while(right>left&a[right]>tmp){//右边往做移动 right--; } while(right>left&a[left]<tmp){//左边往右移动 left++; } if(left<right){//只要是两者不相遇会交换并且再次进行下去 int t=0; t = a[right]; a[right] = a[left]; a[left]=t; } } a[left] = tmp;//左右相遇交换中间数据和基数 return left; } }
快速排序是不稳定的排序。
快速排序的时间复杂度为O(nlogn)。
当n较大时使用快排比较好,当序列基本有序时用快排反而不好。
最坏情况O(n^2)
最好情况
logn * n
平均时间复杂度是O(nlogn)
相关文章推荐
- 编程中五大常用算法..
- Java中的字符替换
- HBase基本数据操作详解【完整版,绝对精品】
- Google Guava 类库简介
- redis 数据类型(二)hash的使用
- Mybatis 级联插入更新
- elasticsearch JAVA客户端操作---搜索的过滤、分组高亮
- JAVA字符串格式化-String.format()的使用
- CompletionService
- Kafka+Storm+HDFS整合实践
- Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
- MyBatis动态连接数据库,动态传入数据库参数
- Java 多线程(八) 线程状态图
- mybatis批量插入、删除
- MySQL详解--锁
- RabbitMQ源码解析前奏--AMQP协议
- Java中Properties类的操作
- mysql乐观锁总结和实践
- elasticsearch__5__java操作之fact
- Idea配置