JAVA排序算法实现 --- 回顾笔记

插入排序

实现代码

public static void insertSort(int[] array){
	    for (int i=1;i<array.length;i++){//将第一个作为有序列,从第二个开始
	        if (array[i]<array[i-1]){
	        //一旦前数较大,就进行前移一位,然后继续和前一位比较,直至到了第一
	       //个或者没有比他更小的了,这样就完成插入,有序列变长,直到无序列为0.
	            int temp=array[i];
	            for (int j=i-1;j>=0 && array[j]>temp;j--){
	                array[j+1]=array[j];
	                array[j]=temp;
	            }
	        }
	    }
 }

测试代码

public static void main(String[] args) {
		int[] r= {12,15,9,20,6,31,24};
		insertSort(r);
		System.out.println(Arrays.toString(r));
}

测试结果

[6, 9, 12, 15, 20, 24, 31]

希尔排序

实现代码

public static void shellSort(int[] r) {
		int len=r.length;
		int t=0;
		//以增量d进行直接插入法,这也是希尔排序改进的地方
		for (int d = len/2; d>0; d=d/2) {
			for (int i = d; i < len; i++) {
				for (int j = i-d; j >= 0 ; j-=d) {
					if (r[j]>r[j+d]) {
						t=r[j];
						r[j]=r[j+d];
						r[j+d]=t;
					}	
				}
			}
		}

测试代码

public static void main(String[] args) {
		int[] r= {59,20,17,36,98,14,23,83,13,28};
		shellSort(r);
		System.out.println(Arrays.toString(r));
}

测试结果

[13, 14, 17, 20, 23, 28, 36, 59, 83, 98]

冒泡排序

实现代码&&测试代码

public class Bubble {
	public static void main(String[] args) {
		int[] arr= {50,13,55,97,27,38,49,65};
		int temp=0;
		for (int i = 0; i < arr.length; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if (arr[i]>arr[j]) {
					temp=arr[j];
					arr[j]=arr[i];
					arr[i]=temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

测试结果

[13, 27, 38, 49, 50, 55, 65, 97]

快速排序

实现代码

//第一次划分
	public static int Partition(int r[],int first,int end) {
		int t=0;
		while (end>first) {
			//往左侧扫描
			while(end>first&&r[end]>=r[first]) end--;
			//出现左大右小时,交换位置,移动左边下标
			if (end>first) {
				t=r[first];
				r[first]=r[end];
				r[end]=t;
				first++;
			}
			//往右侧扫描
			while (end>first&&r[end]>=r[first]) first++;
			//出现左大右小时,交换位置,移动右边下标
			if (end>first) {
				t=r[first];
				r[first]=r[end];
				r[end]=t;
				end--;
			}
		}
		return end;//当end=first时,第一次划分完成,返回值给pivot
	}
	public static void quickSort(int r[],int first,int end) {
		if (end>first) {
			//执行一次划分,再进行二分子序列的递归划分,直到子序列只有一个元素时停止。
			int pivot=Partition(r, first, end);
			quickSort(r, first, pivot-1);
			quickSort(r, pivot+1, end);
		}
	}

测试代码

public static void main(String[] args) {
		int[] r= {23,13,49,6,31,28};
		int first=0;
		int end=r.length-1;
		quickSort(r, first, end);
		System.out.println(Arrays.toString(r));
}

测试结果

[6, 13, 23, 28, 31, 49]

选择排序

实现代码

public static void selectSort(int r[]) {
		int index=0,t=0;
		for (int i = 0; i < r.length; i++) {//扫描
			index=i;
			for (int j = 1+i; j < r.length; j++) {
				if (r[index]>r[j]) index=j;//记录最小值的小标
			} 
			//将该趟的最小值送到有序区
				if (index!=i) {
					t=r[i];
					r[i]=r[index];
					r[index]=t;
				}
		}
	}

测试代码

public static void main(String[] args) {
		int[] r= {49,27,65,97,76,13,38};
		selectSort(r);
		System.out.println(Arrays.toString(r));

	}

测试结果

[13, 27, 38, 49, 65, 76, 97]

参考

[ 1 ] 数据结构 第2版
[ 2 ]这位博主大哥的排序算法很全,还有动画演示,强推!!!

个人建议:还是不是很懂的话,就在不清楚的地方输出一下,纸上演排一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值