几种常见的排序算法
来源:互联网 发布:edraw max mac 密 编辑:程序博客网 时间:2024/06/05 17:00
【希尔排序】
思想是 通过每趟的缩小增量的排序,来使序列变得更加有序,最后来一趟直接插入排序,这样会使得效率会更高;
希尔排序平均时间复杂度为 O(logn);
【快速排序】
思想是 每一趟的快排都是以某个数为枢纽,枢纽的一边全是比它小,另外一边全是比它大的,经过这样几次的排序,最终得到一个有序的序列。
void quickSort(int arr[],int begin,int end){ int temp; int i = begin,j = end; if(i<j){ temp = arr[i]; while(i!=j){ while(i<j&&arr[j]>temp) j--; if(i<j){ arr[i] = arr[j]; i++; } while(i<j&&arr[i]<temp) i++; if(i<j){ arr[j] = arr[i]; j--; } } arr[i] = temp; quickSort(arr, begin, i-1); quickSort(arr, i+1, end); } }
快排最好的情况是 O(nlogn),最坏的情况下 O(n^2),平均情况下是O(nlogn);
就平均情况而言,快排是所有排序算法中最好的,值得一提的是快排的空间复杂度是 O(logn);
【简单选择排序】
void simpleChoiceSort(int arr[],int n){ //每次都从待排序数组中选择一个来进行排序 int temp; int i,j,k; for(i=0;i<n;i++){ k = i; temp = arr[i]; for(j=i+1;j<n;j++){ if(arr[i] > arr[j]){ arr[i] = arr[j]; k = j; } } //因为arr[i]会及时更新,所以只需要对 arr[k]进行处理; arr[k] = temp; System.out.println(arr[i] +"***"); } }
【堆排序】
堆排序的思路:
将无序的序列调整为一个完全二叉树,再调整成一个最大堆或最小堆,从而得到序列的最大的元素或最小的元素,然后与序列的最开始或最后的元素进行交换,重复几次,就可以使这个序列有序。
堆排序大顶堆得调整方法:
将当前结点a的值与子结点进行比较,如果有比它大的子节点,那么就选最大的与其交换,当 a这个结点来到下一层的时候重复上述过程,直到其孩子结点值都小于其值;
/** * 数组元素下标是从1开始的,arr中存储的是一棵完全二叉树 */ void sift(int arr[],int low,int high){ int i = low,j = 2*i; int temp = arr[i]; while(j<=high){ if(j<high&&arr[j]<arr[j+1]) ++j; if(temp<arr[j]){ arr[i] = arr[j]; i = j; j = 2*i; } else break; } arr[i] = temp; } void heapSort(int arr[],int n){ int i; int temp; for(i=n/2;i>=1;i--){ sift(arr,i,n); } for(i=n;i>=2;i--){ temp = arr[1]; arr[1] = arr[i]; arr[i] = temp; sift(arr,1,i-1); } }
二路归并排序
思想:将一个待排序序列首先按一组一个元素这样分成很多组,明显第一次这样分,组内元素都是有序的,毕竟里面元素都只有一个;
接照进行 两个两个归并,进行组内排序,最后会对形成的两个大的有序序列进行归并,这样就可以了;
归并的算法复杂度是 O(nlogn),任何时候都是O(nlogn),跟初始序列无关。
0 0
- 几种常见的排序算法
- java常见的几种排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见的排序算法小结
- 几种常见的排序算法实现
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 常见的几种排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见的排序算法
- 几种常见排序算法的实现
- 谈谈一些感受吧
- 分享 Java 数据库连接器
- 求任意大小矩阵两点之间的最短路径(回溯)
- yacc和lex的林林总总
- python多线程之Queue
- 几种常见的排序算法
- 推荐系统之矩阵分解
- (2012-04-03 老物搬运)初识Robotlegs
- java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
- 推荐系统中的矩阵分解演变方式
- 关于FLASH中图文混排聊天框的小结改
- 【JQuery】自定义对象级插件——lifocuscolor插件
- (2012-4-12 老物搬运)如何去写mediator
- 【JQuery】自定义类级别插件—— twoaddresult