zoukankan      html  css  js  c++  java
  • 【Reading Note】算法读书杂记

    1 排序

    排序基本信息


    稳定性:排序前大的数在排序后,大的数依然保持不变就是稳定排序,反之不稳定

    内外排序:根据待排序的记录是否放在内存里面区分的。诸如:插入排序(直接插入&希尔)、交换排序(冒泡&快排)、选择排序(简单选择&堆排)、归并排序(归并)。

    算法性能影响:时间性能、辅助空间、算法复杂性(算法本身的复杂度跟时间复杂度区分开)。

    简单算法:冒泡排序、简单选择排序、直接插入排序

    改进算法:希尔排序(不稳定)、堆排序(不稳定)、归并排序、快排(不稳定)

    总之:排序四大类,简单有三种,改进为四种。不稳多改进算法

    排序方法       平均情况          最好情况        最坏情况        辅助空间        稳定性

    冒泡排序       O(N^2)           O(N)           O(N^2)            O(1)           稳定

    简单选择       O(N^2)           O(N^2)       O(N^2)            O(1)           稳定

    直接插入       O(N^2)           O(N)           O(N^2)            O(1)           稳定

    希尔排序       O(NlogN~N^2)O(N^1.3)    O(N^2)            O(1)           不稳定

       堆排序       O(NlogN)         O(NlogN)    O(NlogN)          O(1)           不稳定

    归并排序       O(NlogN)         O(NlogN)    O(NlogN)          O(N)           稳定

    快速排序       O(NlogN)         O(NlogN)    O(N^2)            O(logN~N)  不稳定

    简单算法:冒泡排序


    个人名片:我是冒泡排序,稳定性较好,是内排序中的交换排序,也是简单排序会员。基本思想,哦也可以说个人介绍:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

    Java实现:

    import java.util.Queue;
    import java.util.Stack;
    
    
    public class BagDome {
    
    	/*交换数据函数*/
    	public static void swap(int[] arr,int i,int j){
    		int temp=arr[i];
    		arr[i]=arr[j];
    		arr[j]=temp;
    	}
    	public static void swap1(int[] arr,int i,int j){
    		arr[i]=arr[i]^arr[j];
    		arr[j]=arr[i]^arr[j];
    		arr[i]=arr[i]^arr[j];
    	}
    	/*遍历读取数组*/
    	public static void printarr(int[] arr){
    		for(int i:arr){
    			System.out.print(" "+i);
    		}
    	}
    	//1 对记录作交换排序(冒泡排序的初级版),例如int[] a={9,1,5,8,3,7,4,6,2};
    	public  static void BubbleSort1(int[] arr){
    		for(int i=0;i<arr.length;i++){
    			for(int j=i+1;j<arr.length;j++){
    				if(arr[i]>arr[j]){
    					swap(arr,i,j);
    				}
    			}
    		}
    	}
    	//2 对记录进行冒泡排序(改进版),例如int[] a={9,1,5,8,3,7,4,6,2};
    	public  static void BubbleSort2(int[] arr){
    		for(int i=0;i<arr.length;i++){
    			for(int j=arr.length-2;j>=i;j--){
    				if(arr[j]>arr[j+1]){
    					swap(arr,j,j+1);
    				}
    			}
    		}
    	}
    	//3 基本有序的冒泡优化算法,例如int[] a={2,1,3,4,5,6,7,8,9};
    	public  static void BubbleSort3(int[] arr){
    		boolean flag=true;
    		for(int i=0;i<arr.length && flag;i++){
    			for(int j=arr.length-2;j>=i;j--){
    				if(arr[j]>arr[j+1]){
    					swap(arr,j,j+1);
    					flag=false;
    				}
    			}
    		}
    	}
    	public static void main (String[] args) throws java.lang.Exception
    	{
    		// your code goes here
    		//int[] arr={9,1,5,8,3,7,4,6,2};
    		int[] arr={2,1,3,4,5,6,7,8,9};
    		System.out.print("冒泡排序前:	");
    		printarr(arr);
    		//BubbleSort1(arr);
    		//BubbleSort2(arr);
    		BubbleSort3(arr);
    		System.out.print("
    冒泡排序后:	");
    		printarr(arr);
    	}
    }
    

    简单排序:简单选择排序


     

    个人名片:我是简单选择排序,稳定性较好,是内排序中的选择排序,也是简单排序会员。基本思想:。

     

  • 相关阅读:
    @EnableTransactionManagement的使用
    Spring事务管理之几种方式实现事务
    instr和like的使用区别
    linux查看服务安装目录redis
    struts2的结果类型
    ajax 的 get 方式
    数据库隔离级别
    数据库隔离级别
    input from 表单提交 使用 属性 disabled=&quot;disabled&quot; 后台接收不到name=&quot;username&quot;的值
    Path Sum
  • 原文地址:https://www.cnblogs.com/baiboy/p/6051032.html
Copyright © 2011-2022 走看看