JAVA 삽입 정렬 분석

2346 단어 자바면접시험J#
사실 저 는 기초 가 부족 합 니 다. 최근 에 심심 하면 서 다른 사람 을 가 르 칠 때 많은 것 을 알 게 되 었 습 니 다. 면접 에서 자주 만 나 는 삽입 순 서 를 분석 해 드 리 겠 습 니 다.쓸 줄 만 알 지 말고 이해 해 야 돼. 마음대로 써. 잘 모 르 겠 으 면 연락 해.늙 은 새 가 날 아 간다 (JAVA 코드, 직접 복사 가능)
 
package com.chris;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
 * 插入排序
 * @author chris
 *
 */
public class InsertSort {
	List<Integer> al;

	/**
	 * 构造方法,生成随机数组
	 * 
	 * @param num
	 * @param mod
	 */
	public InsertSort(int num, int mod) {
		al = new ArrayList<Integer>(num);
		Random rand = new Random();
		System.out.println("排序前的数据:");
		for (int i = 0; i < num; i++) {
			al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
			System.out.println("al[" + i + "]=" + al.get(i));
		}
	}

	/**
	 * 进行排序(由小到大)
	 */
	public void SortIt() {
		int tempInt;
		int MaxSize = 1;//待比较数据的索引,从第一个开始
		System.out.println("

【观察以下部分每行数据与排序前每个数据的位置】"); for (int i = 1; i < al.size(); i++) { tempInt = (int) al.remove(i);//移除当前位置的数据,并将这个数据存放到tempInt中 if (tempInt >= ((int) al.get(MaxSize - 1))) { al.add(MaxSize, tempInt);//如果移除的这个数据比前一个大,就把这个数据放回原位,不做处理 MaxSize++;//索引+1 System.out.println("当前list中的数据:" + al.toString()); //2,7,5 } else { /** * 下面的操作就是把这个数据插入当前索引之前第一个比它大的数据的索引的位置<br /> * 如果看不懂,就运行看效果就明白了br/> * */ for (int j = 0; j < MaxSize; j++) { if ((int) al.get(j) >= tempInt) { al.add(j, tempInt); MaxSize++;//索引+1 System.out.println("当前list中的数据:" + al.toString()); break; } } } } System.out.println("【观察以上部分每行数据与排序前每个数据的位置】

"); System.out.println("排序后的数据:"); for (int i = 0; i < al.size(); i++) { System.out.println("al[" + i + "]=" + al.get(i)); } } public static void main(String[] args) { InsertSort is = new InsertSort(10, 100); is.SortIt(); } }

 

좋은 웹페이지 즐겨찾기