【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);
	}
}

简单排序:简单选择排序


 

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

 

原文地址:https://www.cnblogs.com/baiboy/p/6051032.html