希尔排序,堆排序,快速排序
2016-12-27 21:25
399 查看
1.希尔排序
插入排序的改进算法,不稳定的排序算法,空间复杂度为O(1)public static void shellSort(int a[]){ int k=a.length; int temp; while (k>1) { k=(k+1)/2; for (int i = 0; i < a.length-k; i++) { if (a[i]>a[i+k]) { temp=a[i]; a[i]=a[i+k]; a[i+k]=temp; } } } }
2.快速排序
冒泡排序的改进算法,不稳定的排序算法空间复杂度在O(log2n)和O(n)之间
时间复杂度在O(n)和O(n2)之间,平均时间复杂度为O(nlog2n),而当数组初始有序的条件下,快速排序会退化为冒泡排序
//一趟快速排序算法 public static int partition(int i,int j){ int temp=a[i]; while (j>i) { while (temp<=a[j]&&j>i) { j--; } if (j>i) { a[i]=a[j]; i++; } while (temp>=a[i]&&j>i) { //写temp>=a[i],将i误写成了j浪费了大量时间排错 i++; } if (j>i) { a[j]=a[i]; j--; } } a[i]=temp; return i; } //static int count=0; //递归调用partition()函数,进行多趟排序直至整个数组有序 public static void qSort(int low,int high){ if (high>low) { int i=partition(low, high); qSort(low, i-1); qSort(i+1, high); //System.out.print(++count); } } public static void quickSort(int []a){ qSort(0, a.length-1); }
3.堆排序
树形排序的改进型排序算法,不稳定的排序算法空间复杂度O(1)
时间复杂度O(nlog2n)
public static void shift(int low,int high){ int i=low; int j=2*i+1; int temp=a[i]; while (j<high) { if (j<high-1&&a[j]>a[j+1]) { j++; } if (a[i]>a[j]) { a[i]=a[j]; i=j; j=2*i+1; }else { j=high+1; } } a[i]=temp; } public static void heapSort(){ int len=a.length; int temp; //初始化堆 for (int i=len/2-1;i>=0;i--) { shift(i, len); } //将最小关键字值交换到后面,再调整堆 for (int i=len-1;i>0;i--) { temp=a[0]; a[0]=a[i]; a[i]=temp; shift(0, i); } }
相关文章推荐
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 快速排序,归并排序,堆排序,基数排序,插入排序,希尔排序,
- 排序方法了解一下(冒泡排序、选择排序、堆排序、插入排序、希尔排序、归并排序、快速排序、基数排序)
- IOS- 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- 基本的排序算法:冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序
- 数据结构-排序算法详解(插入排序,希尔排序,堆排序,归并排序,快速排序,桶式排序)
- 快速排序 归并排序 堆排序 希尔排序
- java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 面试珠玑 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 数据结构与算法从零开始系列:冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序、基数排序
- 10种算法原理(冒泡排序,选择排序,快速排序,堆排序,希尔排序,桶排序等)
- oc中的排序 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- 快速排序 归并排序 堆排序 希尔排序
- 插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序
- 三种改进型排序算法-快速排序,堆排序,希尔排序