2020-12-09

排序

个人对于几个排序的认识:

  1. 插入排序:将要排序的数组分成两个部分,有序部分,待插入部分。把无序的部分插入到有序的当中,遇到第一个比插入元素要大的元素,该插入元素插入到这个元素的位置。例子如下:
    一个无序数组int a[]={50,10,30,5,77}。
    第一轮:我们先假设50是有序的部分,10是待插入的。
    10和50比较,
    50>10------一次
    本轮排序后的顺序:10,50。
    第二轮:10,50有序部分,我们再插入30,拿30和10,50,依次比较,
    10,30,50------一次(和50比较)
    10,30,50-----二次(和10比较)这里因为30比10大,所以不用调换位置。
    本轮排序后的顺序:10,30,50。
    第三轮:10,30,50有序的,5待插入的。拿5依次和它们比较,
    10,30,5,50------一次
    10,5,30,50------二次
    5,10,30,50-----三次
    本轮排序后的顺序:5,10,30,50
    第四轮:5,10,30,50是有序的,77是待插入的。拿77依次和它们比较,
    5,10,30,50,77------一次
    5,10,30,50,77------二次
    5,10,30,50,77------三次
    5,10,30,50,77------四次
    本轮排序后的顺序:5,10,30,50,77
    这里77虽然都比它们大,但是依然要和它们依次比较,(不要认为不用比较,这次是是因为77比它们大,下次如果是45,或者比5还小的数呢?如:4,3。。。所以一定要比较)
    总结一下:插入排序,可以理解成,先固定第一个数,再选后一个数作为待插入的,比较大小,然后交换位置,小的排前面,大的排后面。随着有序部分的数增多,后面待插入的数要逐个依次和有序部分的数比较大小
public static void main(String[] args){
	int a[]={50,10,30,5,77};//定义一个数组
	System.out.println("原数组:\n"+Arrays.toString(a));
	for(int i=1;i<a.length;i++){//外层循环,控制轮数,轮数=数组长度-1,这里i从1开始是考虑到下面j的取值,假设i=0,j=i-1就没有意义了,所以i=1开始
		for(int j=i;j>0;j--){//内层循环,控制比较次数
			if(a[i]<a[j-1]){
				int temp=a[j-1];
				a[j-1]=a[i];
				a[i]=temp;
			}
		}
	}
	System.out.println("插入排序: \n"+Arrays.toString(a));
}

在这里插入图片描述
删除节点的实现:
ListNode removeNthFromEnd(ListNode head, int n) {
// write your code here
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode fast = dummy;
ListNode slow = dummy;
while (fast != null && n > -1) {
fast = fast.next;
n–;
}
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return dummy.next;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值