voidinsertion_sort(intarray[], int first, int last){ int i, j; int temp; for (i = first + 1; i <= last; i++) { temp = array[i]; j = i - 1; while ((j >= 0) && (array[j] > temp)) { array[j + 1] = array[j]; //与已排序的数逐一比较,大于temp时,该数移后 j--; } if (j != i - 1) //存在大于temp的数时 array[j + 1] = temp; } }
intmain(){ int a[8], i; for (i = 0; i < 8; i++) { //输入要排序的数,保存到数组里 scanf("%d", &a[i]); } int j; insertion_sort(a, 0, 7); //调用insertion_sort方法 for (j = 0; j < 8; j++) //将排好序的数组输出出来 printf("%d ", a[j]); return0; }
List initLink(int arr[]){ List p = (List) malloc(sizeof(List)); //创建一个头结点,动态分配一下空间 List temp = p; //声明一个指针指向头结点,用于遍历链表 //生成链表 for (int i = 0; i < 4; i++) { //创建节点并初始化 List a = (List) malloc(sizeof(L)); a->Data = arr[i]; a->Next = NULL; //建立新节点与直接前驱节点的逻辑关系 temp->Next = a; temp = temp->Next; } return p; }
intgetlength(List PtrL){ //得到链表长度,防止插入位置超过长度,有点可有可无 List s = PtrL; int j = 0; while (s) { s = s->Next; j++; } return j; };
List Find(int n, List PtrL){ //查找要插入的位置,返回要插入位置的头节点 List p = PtrL; int i = 0; while (p != NULL && i < n) { p = p->Next; i++; } if (i == n) return p; elsereturnNULL; };
List MergeList(List s, int i, List PtrL){ //合并函数,其实就是插入.插到a位置,表二尾指向原来表一的第a个节点,a-1指向表二头. List p, k; int length = getlength(s); p = Find(i - 1, PtrL); if (i > 0 && p != NULL) { k = s; for (i = 0; i < length - 1; i++) { k = k->Next; } k->Next = p->Next; p->Next = s; return PtrL; } }