当前位置 : 主页 > 编程语言 > c++ >

java实现直接插入排序

来源:互联网 收集:自由互联 发布时间:2021-07-03
一个方法插入排序的方法块,有详细的说明 /**直接插入排序:首先选定一个数作为有序序列,然后把其它无序数一个一个数插入到这个有序序列中。*插入过程:将要插入的这个数从有
一个方法插入排序的方法块,有详细的说明
/**直接插入排序:首先选定一个数作为有序序列,然后把其它无序数一个一个数插入到这个有序序列中。
	*插入过程:将要插入的这个数从有序序列的最后一个数开始比较,若小于,则被比较的这个数后移1;再和倒数第二个比较....直至插入后为有序序列
	*@param base int[]类型,待排序数组
	*@return base  返回排好序的数组
	*/
	public int[] directInsertSort(int[] order){
		//首先判断如果数组长度小于等于1,则不用进行排序,直接返回
		if(order.length <= 1){
			return order;
		}

		/*
			首先默认数组第一个数是有序的,即下标为0
			算法说明,首先第一个for代表待插入数据,即无序数据,初始i为1,即数组下标为1的元素开始进行插入。
			第二个for代表当前的有序数据,初始j的值即是当前有序数组的最大的下标(因为需要从后往前插)。
			过程:首先insertIndexOf动态的记录待插入数的当前位置,初始值是i的值,然后依次与有序数组从后往前比,
						若比有序数组下标为j的数小,则和它交换位置,并且把下标j赋给insertIndexOf。这样就相当于有序数
						组下标为j的数向后移了一位,然后它插入。   以此循环,直到遇到比它小的,那么它的位置就不用动了
						,然后直接进入下一个数进行插入。
		*/
		int temp = 0;												//作为临时变量
		for(int i = 1;i  < order.length;i++){
			int insertIndexOf = i;								//初始化待插入数的当前位置
			for(int j = i - 1;j >= 0;j--){
				if(order[insertIndexOf] < order[j]){
					temp = order[insertIndexOf];
					order[insertIndexOf] = order[j];
					order[j] = temp;
					insertIndexOf = j;
				}else{
					break;												//如果待插入数比它前一位数大则不用继续下一轮比较,跳出本层循环,进行下一个数插入
				}

			}

		}
		return order;
	}
网友评论