数据结构:插入排序(Insertion sort)

 

package com.sortbasic;

import java.util.Random;

public class InsertionSort {
	
	// 数组
	private static int[] arr = null;
	
	// 随机生成数组
	// 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
	public static int[] generateRandomArray(int n, int rangeL, int rangeR){
		
		int[] arr = new int[n];
		for(int i=0;i<n;i++){
			arr[i] = new Random().nextInt(rangeR-rangeL)+rangeL;
		}
		
		return arr;
	}
	
	// 近乎有序的数组序列
	public static int[] generateRandomArrayNearOrder(int n,  int swapTimes){
		
		int[] arr = new int[n];
		for(int i=0;i<n;i++){
			arr[i] = i;
		}
		
		 for( int i = 0 ; i < swapTimes ; i ++ ){
	            int posx = new Random().nextInt(n);
	            int posy = new Random().nextInt(n);
	            int temp = arr[posx];
	            arr[posx] = arr[posy];
	            arr[posy] = temp;
	     }
		 
		return arr;
	}

	// 插入排序  将数据插入到已经排好序的数据中
	static void insertionSort(int arr[], int n){

		for(int i=1;i<n;i++){
			//写法1
//			for(int j=i; j>0; j--){
//				if(arr[j] < arr[j-1]){
//					int temp  = arr[j];
//					arr[j] = arr[j-1];
//					arr[j-1] = temp;
//				}else{
//					break;
//				}
//			}
			
			// 写法2
//			for(int j=i; j>0 && arr[j] < arr[j-1]; j--){
//				int temp  = arr[j];
//				arr[j] = arr[j-1];
//				arr[j-1] = temp;
//			}
			
			// 写法3
			int e = arr[i];
			int j;
			for(j=i; j>0 && arr[j-1]>e; j--){
				arr[j] = arr[j-1];
			}
			arr[j] = e;
		}
	}
	
	// 打印数组
	static void printArray(int arr[], int n) {
		for(int i=0; i<n; i++){
			System.out.println(arr[i]+" ");
		}
	}
	
	public static void main(String[] args){
		int size = 10000;
		//arr = generateRandomArray(size, 0, 100000);
		arr = generateRandomArrayNearOrder(size, 100);
		long startTime = System.currentTimeMillis();
		insertionSort(arr,size);
		long endTime = System.currentTimeMillis();
		System.out.println(endTime-startTime);
		//printArray(arr, size);
	}
}
发布了557 篇原创文章 · 获赞 40 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/m0_37564426/article/details/103089200
今日推荐