java排序综述

排序可以分为两种:外排序和内排序

内排序:排序过程中,全部的记录放在内存中,称为内排序。

外排序:排序过程中,需要使用外存,称为外排序。

本文只讲内排序,内排序可以分为以下几种:

(1)插入排序:直接插入排序、二分插入排序和希尔排序。

(2)选择排序:简单选择排序、堆排序。

(3)交换排序:冒泡排序、快速排序。

(4)归并排序

(5)基数排序

(一)插入排序

1.1直接插入排序

思路:每一步将一个待排序的元素,按其顺序码大小,插入到已排序的子序列的合适位置(从后向前找到合适的位置后),直到全部插入排序完为止。

Java code:

public class DiectInsertSort {
	public static void main(String[] args){
		int[] arr = {1, 2, 5, 3, -4};
		
		System.out.println("数组排序之前:");
		for (int i  = 0; i < arr.length; i++){
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		System.out.println();
		
		
		//直接插入排序
		int j;
		for(int i = 1; i < arr.length; i++){
			int tmp = arr[i]; //将要移动的元素
			
			for (j = i-1; j >= 0; j--){
				if (arr[j] > tmp){
					//向前移动一位
					arr[j+1] = arr[j];
				} else {
					break;
				}
			}
			
			//j+1位置的元素已经向前移动了,将移动后的位置赋a[i]的值
			arr[j+1] = tmp;
		}
		
		System.out.println("数组排序之后:");
		for (int i = 0; i < arr.length; i++){
			System.out.print(arr[i] + " ");
		}
		
	}
}
数组排序之前:
1 2 5 3 -4 


数组排序之后:
-4 1 2 3 5 


直接插入算法分析:

稳定性:直接插入排序算法是稳定的排序算法。

时间复杂度:如果序列初始就是正序的,每个元素只要对比一次,时间复杂度为O(n);如果初始状态时反序的,时间复杂度最大,为O(n2),是最坏的情况。

因此,时间复杂度为O(n2)


1.2二分插入排序

基本思想:和直接插入排序的思想一样,这里是按照二分法找到合适的位置,可以减少比较的次数。




你可能感兴趣的:(java,内排序)