java——快排、冒泡、希尔、归并
直接贴代码
快排:
- public class Test {
- private static void sort(int[] nums){
- if(nums == null || nums.length == 0){
- return;
- }
- quickSort(nums, 0, nums.length-1);
- }
- private static void quickSort(int[] nums, int start, int end) {
- int low = start;
- int high = end;
- int temp = nums[start];
- while(start<end){
- while (start<end && nums[end]>=temp){
- end--;
- }
- swap(nums, start, end);
- while(start<end && nums[start]<=temp){
- start++;
- }
- swap(nums, start, end);
- }
- if(start-1>low) {
- quickSort(nums, low, start - 1);
- }
- if(high>start+1) {
- quickSort(nums, start + 1, high);
- }
- }
- private static void swap(int[] nums, int i, int j){
- int temp = nums[i];
- nums[i] = nums[j];
- nums[j] = temp;
- }
- public static void main(String [] args){
- int[] nums = {49,22,34, 6,22,19,3,19};
- sort(nums);
- for(int i=0;i<nums.length;i++){
- System.out.print(nums[i]+“ ”);
- }
- }
- }
冒泡:
- private static void bubbleSort(int[] num){
- for(int i = 0 ; i < num.length ; i ++) {
- for(int j = 0 ; j < num.length - i - 1 ; j ++){
- if(num[j]>num[j+1]){
- swap(num, j , j+1);
- }
- }
- }
- }
改进冒泡:
- public void bubbleSort(int arr[]) {
- boolean didSwap;
- for(int i = 0, len = arr.length; i < len - 1; i++) {
- didSwap = false;
- for(int j = 0; j < len - i - 1; j++) {
- if(arr[j + 1] < arr[j]) {
- swap(arr, j, j + 1);
- didSwap = true;
- }
- }
- if(didSwap == false)
- return;
- }
- }
改进后的冒泡排序最佳情况下时间复杂度为O(n)
希尔排序:
- private static void shellSort(int[] nums){
- for(int d = nums.length/2 ; d > 0 ; d = d / 2){
- for(int i = d ; i < nums.length ; i ++){
- for(int j = i; j>=d; j = j-d){
- if (nums[j] < nums[j - d]) {
- swap(nums, j - d, j);
- }else{
- break;
- }
- }
- }
- }
- }
归并排序:
- private static void mergeSort(int[] nums, int low, int high){
- if(low>=high){
- return;
- }
- int mid = (low+high)/2;
- mergeSort(nums, low, mid);
- mergeSort(nums, mid + 1, high);
- merge(nums,low, mid, high);
- }
- private static void merge(int[] nums, int low, int mid, int high){
- int[] temp = new int[high-low+1];
- int i = low;
- int j = mid+1;
- int k = 0;
- while(i<=mid&&j<=high){
- if(nums[i]<nums[j]){
- temp[k++] = nums[i++];
- }else{
- temp[k++] = nums[j++];
- }
- }
- while(i<=mid){
- temp[k++] = nums[i++];
- }
- while(j<=high){
- temp[k++] = nums[j++];
- }
- for(int p = 0 ; p < temp.length ; p++){
- nums[low+p] = temp[p];
- }
- }
java——快排、冒泡、希尔、归并的更多相关文章
- Java 快排
基于分治法的快排,用递归实现. 首先讲一下实现的过程. 1.在数组中取一个数作为基准,所谓的基准就是用来对比的数. 2.然后在数组中从后往前找,找到一个逆序数为止,找到之后就把它的值赋值到基准数的位, ...
- Java 快排 排序
一.快排的一种 ==================== public class myMain { public static void main(String[] args) { int t[] ...
- java快排(两种方法)
快排是最基础的排序算法之一,今天来回顾一下. public class QuickSort { public static void quickSort(int[] array){ if(array ...
- [排序] 快排 && 冒泡(自己写)
#include <iostream> using namespace std; /* 快速排序 通过一趟排序,以轴点为界 分割为两部分:左部分 <= 轴点 <= 右部分 再分 ...
- JS算法之快排&冒泡
1.快速排序思想: 1.1 先找数组的最中间的一个数为基准 1.2 把数组通过此基准分为小于基准的left数组和大于基准的right数组, 1.3 递归重复上面的两个步骤, 代码如下: functio ...
- java快排思想
1分治思想 1.1比大小在分区 1.2从数组中取出一个数做基准数 1.3将比他小的数全放在他的左边,比他大的数全放在他的右边 1.4然后递归 左边 和右边 }
- 使用Python完成排序(快排法、归并法)
class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...
- Java快排
package quickSort; /** * 快速排序 * @author root * */ public class QuickSort { static int[] data = {0,2, ...
- Java 排序(快排,归并)
Java 排序有Java.util.Arrays的sort方法,具体查看JDK API(一般都是用快排实现的,有的是用归并) package yxy; import java.util.Arrays; ...
随机推荐
- Struts 第一天
请简述下Struts2 的执行流程. 首先是,启动tomcat服务器,这时候会加载web.xml,当读到filter标签时,会创建过滤器对象.struts2的核心过滤器(StrutsPrepareAn ...
- hibernate第三天 一对多 , 多对多
1.1. 阐述你对inverse的理解 答: 1.inverse的默认值是false,代表不放弃外键维护权,配置值为true,代表放弃了外键的维护权. 2.双方维护外键会多产生update语句,造成浪 ...
- p3253 [JLOI2013]删除物品
传送门 分析 我们发现两个栈可以看作一个数组,而栈顶则是将这个数组拆成两个栈的分割点. 于是每次移动就变成了分割点的移动,每次移动时都统计下目的分割点和当前分割点之间的物品数目即可. 代码 #incl ...
- 机器学习初探(手写数字识别)matlab读取数据集
手写数字识别是机器学习里面的一个经典问题,今天就这一段时间学习的机器学习,花一个下午茶的时间,试试机器学习. 首先数据库是在MNIST(http://yann.lecun.com/exdb/mnist ...
- 《Head First Servlets & JSP》-5-属性和监听
Servlet初始化参数 在DD文件(web.xml)中 Servlet参数在/参数下: 在Servlet代码中 在Servlet初始化之前不能使用Servlet初始化参数 一旦有了一个Servlet ...
- Android应用启动优化:一种DelayLoad的实现和原理
http://www.androidperformance.com/2015/11/18/Android-app-lunch-optimize-delay-load.html
- android studio中Fragment使用webview返回上一页的问题
在Fragment中使用了腾讯的X5 webview,虽然好用,但是在Fragment中传递消息困难,想要返回上一页,还得各种消息传递什么的,麻烦.可是在Fragment中又不能使用onKeyDown ...
- 通过ajax把json对象传入后台
一.前台ajax部分 function icheckDelete(url){ var parms = { list : array //这是个数组 }; $.ajax({ dataType: &quo ...
- BIO与NIO的方式实现文件拷贝
面试题 - 编程实现文件拷贝.(这个题目在笔试的时候经常出现,下面的代码给出了两种实现方案) import java.io.FileInputStream; import java.io.FileOu ...
- snmp snmp4j的使用
snmp4j的使用 一.什么是snmp及snmp4j? snmp是 Simple Network Management Protocol (简单网络管理协议)的简写. SNMP4J是一个用Java来实 ...