冒泡排序、选择排序、插入排序

本人小白一名,描述的可能不是很好。有哪些错误的地方望指正

1.冒泡排序:就是相邻的两个元素进行比较,例如从小到大的排序,大的数放右边,小的放左边,最终会把最大的放在结尾

arr={22,6,88,20}

第一次比较

若果arr[0]>arr[1]就交换位置,即大的数放右边

第二次比较

arr[1]跟arr[2]比较,发现arr[a]<arr[2]则说明大的数已经在右边,则不需要调换位置

第三次比较

arr[2]跟arr[3]比较,arr[2]>arr[3]就交换位置,即大的数放右边

最终最大的数会被冒到最后

public void sort(int arr[]) {
		if(arr!=null){//1.判断数组是否为空,不为空时才运行
			for (int i = 0; i < arr.length-1; i++) {//至少要循环arr.length-1次
				for (int j = 0; j < arr.length-1-i; j++) {//每进行一次循环比较就会帅选出最大那个,所以无需对已经比较过的在进行比较,即每次循环会减少一次比较arr.length-1-i
					if(arr[j]>arr[j+1]){//当前元素比它后面个元素大时则交换位置
						int temp=arr[j];
						arr[j]=arr[j+1];
						arr[j+1]=temp;
					}
				}
			}
		}
}



2.选择排序(直接排序): 使用数组中的一个元素(被比较元素)与其他位置的元素挨个比较一次,符合条件交换位置。或记录下符合条件的索引index,最后将被比较元素的index和符合条件的index进行元素交换。

	public void choiceSort(int arr[]){//第一种方法,这种方法每次都会进行元素的交换
		if(arr!=null){
			for (int i = 0; i < arr.length-1; i++) {
				for (int j = i+1; j < arr.length; j++) {
					if(arr[i]>arr[j]){
						int temp=arr[i];
						arr[i]=arr[j];
						arr[j]=temp;
					}
				}
			}
		}
	}
	
	public void choiceSort2(int arr[]){//第二种方法,每次比较完后会记录最后符合条件的索引然后进行交换
		if(arr!=null){
			int k;//符合条件的索引
			int temp;
			for (int i = 0; i < arr.length-1; i++) {
				k=i;//记录被比较元素的索引
				for (int j = i+1; j < arr.length; j++) {
					if(arr[k]>arr[j]){//判断条件被比较元素是否大于当前j的元素
						k=j;//记录符合条件的索引
					}
				}
				//交换元素
				temp=arr[i];
				arr[i]=arr[k];
				arr[k]=temp;
			}
		}
	}

3.插入排序:即从索引1(目标元素)开始根前面的所有元素进行比较,符合条件的元素进行后移,在将目标元素放到被移动元素的前面。

public void insertionSort(int arr[]) {
		if(arr!=null){
			int temp;//目标元素
			for (int i = 1; i < arr.length; i++) {//从1开始遍历
				temp=arr[i];//记录目标元素
				int j=i-1;//记录目标元素的前一个索引
				while(j>=0 && arr[j]>temp){//判断目标元素之前的元素有没有大于目标元素的
					arr[j+1]=arr[j];//将大于目标元素的元素后移
					j--;
				}
				if(j!=i-1){//判断之前有没有大于目标元素的,有则替换
					arr[j+1]=temp;
				}
			}
		}
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值