1.链表
初始化一个节点值为0的空节点ListNode list=new ListNode(0)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode insertionSortList(ListNode head) {
if(head==null ||head.next==null){
return head;
}
ListNode *cur=head;//cur未排序工作指针
ListNode Pnode=new ListNode(0);//排序链表
while(var){//当未排序的链表走完结束
ListNode next=cur.next;//记录原链表下一位,防止断链
//每次从已排好序的第一位开始往后移,node已排序工作指针
ListNode *node=Pnode;
//当要插入的大于已排好的,往后寻找,
while(node.next!=null && Node.next.val<cur.val){//node.next指向数字
node=node.next;
}
//当未排序的大于已排号的进行插入
cur.next=node.next;
node.next=cur;
cur=next;
}
return Pnode.next;//第一位是0
}
}
2.数组
public class Solution {
public int[] sort(int[] a){
for(int i=1;i<a.length;i++){
int temp=a[i];//记录每次要插入的数
//当要插入的数小于已排好序的数组,j往前寻找,并将元素后移
for(int j=i-1;j>=0 && a[j]>temp;j--){
a[j+1]=a[j];
}
a[j+1]=temp;//处理要插入的数
}
}
}
本文深入解析了两种常见的数据结构——链表和数组的插入排序算法实现。对于链表,通过创建一个新的链表节点并进行比较和插入操作来完成排序;对于数组,则采用比较和元素后移的方式实现插入排序。文章详细展示了每一步的操作过程,是理解排序算法原理和实现细节的优质资料。
1042

被折叠的 条评论
为什么被折叠?



