数据结构与算法-第九章 排序
来源:互联网 发布:Linux安装telnet yum 编辑:程序博客网 时间:2024/06/03 21:08
低级排序:
冒泡排序、选择排序、插入排序
高级排序:
1. 冒泡排序
排序思想:从左到右进行扫描,选择最大的数据,放在右边。
代码要点:相邻的数据两两进行比较,如果左边的比右边的大,将俩数进行交换。
冒泡类似于湖底的泡泡逐渐冒到湖面,序列中的最小的值冒到最前面,最下面是最大值。
O(N^2)
//冒泡排序 相邻的两个值相互交换public void getBubbleSort(int []arr){if (arr.length<=1) {return;}int temp=0;for (int i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-i-1; j++) {if (arr[j]>arr[j+1]) {temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}
2.选择排序
思想:从当前未排序的整数中找一个最小的整数,将它放在已排序的整数列表的最后。
要点:选择排序选最小的,往左边选。
//选择排序public void getSelectSort(int [] arr){if (arr.length<=1) {return ;}int temp=0;for (int i = 0; i < arr.length; i++) {for (int j = i+1; j < arr.length; j++) {if (arr[i]>arr[j]) {//交换temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}}
3.插入排序
思想:将一个记录插入到已经排好序的有序表中。
//插入排序public void getInsertSort(int []arr){if (arr.length<=1) {return;}int in=0,out=0;for(out=1;out<arr.length;out++){int temp=arr[out];in=out;while(in>0&&arr[in-1]>temp){arr[in]=arr[in-1];- -in;}arr[in]=temp;}}
4.快速排序
速度最快的排序算法。(枢轴、枢纽)
思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分进行排序,最后得到排序结果。(使用递归)选一个枢轴进行划分,然后递归进行选枢轴划分。
用分治法的三个步骤来描述快速排序的过程如下:
划分步骤:通过枢轴元素 x 将序列一分为二, 且左子序列的元素均小于 x,右子
序列的元素均大于 x;
治理步骤:递归的对左、右子序列排序
//快速排序public void getQuickSort(int []arr, int low, int high){int position=0;if (low<high) {position=Partition(arr, low, high);getQuickSort(arr, low, position-1);//前半部分使用递归getQuickSort(arr, position+1, high);//后半部分使用递归}}//将序列划分为两个子序列 并返回枢轴元素的位置public int Partition(int[] ra, int low, int high){int position=0;position=ra[low];//初始时取第一个数int temp=0;while(low<high){while (low<high && ra[high]>=position) {high--;}temp=ra[high];ra[high]=ra[low];ra[low]=temp;while(low<high&& ra[low]<=position){low++;}temp=ra[low];ra[low]=ra[high];ra[high]=temp;}return low;}
5.归并排序
思想:不断的两两归并,有序的与有序的进行归并。
归并排序中一个核心的操作是将一个序列中前后两个相邻的子序列合并为一个有序序
列 。
下图为归并算法的理解示意图:
下图是输入一个数组后怎样进行归并排序示意图:
0 0
- 数据结构与算法-第九章 排序
- 大话数据结构 -- 第九章 排序
- 《大话数据结构》第九章 排序
- 数据结构算法与应用第九章-优先队列
- 【数据结构与算法】排序
- 数据结构与算法 -排序
- 数据结构与算法:排序
- 【数据结构与算法】排序
- [算法与数据结构] 排序
- 数据结构与算法:排序
- 【数据结构与算法】排序算法
- 数据结构与算法排序算法
- 数据结构与算法-----排序算法
- 排序算法与数据结构汇总
- 算法与数据结构--拓扑排序
- 数据结构与算法-快速排序
- 【数据结构与算法】冒泡排序
- 【数据结构与算法】快速排序
- 启动其他Activity的Fragment并返回结果
- ViewState的使用与配置
- Oracle SQL 优化全过程
- 跳转到修改页面和执行修改需要注意的小问题
- Android 剪贴板的简单使用
- 数据结构与算法-第九章 排序
- struts2文件下载和文件上传
- 对视图进行 DML 操作
- 多项式Polynomial
- 使用ListView保存历史输入记录
- 改进后的汉字截取处理程序(含测试用例)
- JSP“抓”网页代码的程序
- 弹出列表对话框,选择列表项后返回结果并消失
- Java实现数据统计的常用算法