数据结构插入排序&希尔排序

直接插入排序

public void insertsort(int[] num,int n){
		
		for(int i=1;i<n;i++){
			//如果大于则直接插入
			//如果小于则向后移动数组
			if(num[i]<num[i-1]){
				//存储该元素和位置,移动前一个元素位置
				int x=num[i];
				int j=i-1;
				num[i]=num[i-1];
				//一直移动到大于某个值时
				while( x < num[j] ){
					num[j+1]=num[j];
					j--;
				}
				num[j]=x;
			}
			for(int element:num){
				System.out.println(element);
			}
		}

希尔排序

public void shelsort(int[] num,int n){
		int i,j,inc,key;
		//初始增量为n/2,此后是每次除以2
		for(inc=n/2;inc>0;inc/=2){
			//每一趟采用插入排序,从inc开始,一共要进行inc~n-1次
			for(i=inc;i<n;i++){
				//存储当前值
				key=num[i];
				//j以增量级递减,key和j-inc比较,因此j最小值大于inc
				for(j=i;j>=inc && key<num[j-inc];j-=inc){
					num[j]=num[j-inc];
				}
				num[j]=key;
			}
		}

希尔排序作者:请叫我AXin的个人空间_哔哩哔哩_Bilibili

参考:排序算法:希尔排序【图解+代码】_哔哩哔哩_bilibili

posted @ 2021-07-01 21:53  李李lee  阅读(10)  评论(0)    收藏  举报