数据结构6

选择排序

选择排序也是一种简单的排序方法。它的基本思想是:第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]~arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]~arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

private void arrSort(int[]arr) {
	int temp=0;
	for (int i = 0; i < arr.length-1; i++) {
		for (int j = i+1; j < arr.length; j++) {
			if (arr[i]>arr[j]) {
				temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
		}
	}
}

对于十万个数据有
在这里插入图片描述

插入排序

插入排序的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

private void insertSort(int[] arr) {
	// TODO Auto-generated method stub
	int insertValue;
	int insertIndex;
	
	for (int i = 1; i < arr.length; i++) {
		insertValue=arr[i];
		insertIndex=i-1;
		while (insertIndex>=0&&insertValue<arr[insertIndex]) {
			arr[insertIndex+1]=arr[insertIndex];
			insertIndex--;
		}
		if (insertIndex+1!=i) {
			arr[insertIndex+1]=insertValue;
		}
	}
}

如果待插入的数是最小的就需要对它之前所有的数进行向后移位
对于十万个数据有
在这里插入图片描述

经测试,插入排序比选择排序效率高很多

希尔排序

希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
希尔排序法基本思想:
希尔排序是把记录按下标的一定步长分组,对每组使用直接插入排序算法排序;随着步长逐渐减少,每组包含的数越来越多,当步长减为1时,整个数组恰被分成一组,此时就完成了排序

	private void shellSort(int[] arr) {
		// TODO Auto-generated method stub
		int i,j,inc,key;
		for (inc = arr.length/2; inc>0; inc/=2) {
		// 每一趟进行排序
			for (i = inc; i < arr.length; i++) {
		// 记录下需要插入的数		
				key=arr[i];
		// 插入排序:对每一个需要插入的数,在该组循环中,如果小于arr[j-inc]并且未插入完全,把这个数之后的数全部向后移一位
				for (j = i; j >=inc&&key<arr[j-inc]; j-=inc) {
					arr[j]=arr[j-inc];
				}
				arr[j]=key;
			}
			print_arr(arr);
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值