跳转至

表插入排序

代码

#include<iostream>
using namespace std;
#define LISTSIZE 13
typedef struct {
    int value;
    int next;
}LinkedList;

void initList(LinkedList list[],int num[],int count) {  //初始化循环链表
    list[0].value = INT32_MAX;
    list[0].next = 1;
    for (int i = 0; i < count; i++) {  //数组的元素按顺序存入list数组1-13位置,next全为0
        list[i + 1].value = num[i];
        list[i + 1].next = 0;
    }
}
void sortList(LinkedList list[]) {  //根据数组数据对循环链表进行排序
    int pre, num;   //list数组1和1位置未有序序列的循环列表,将余下元素插入
    for (int i = 2; i < LISTSIZE; i++) {
        num=pre = 0;
        while (list[i].value<list[num].value) //每次都与先于预设的最大值比较
        {
            pre = num;
            num = list[num].next;
            if (num == 0) {//防止list[i].value比前面的数字都小而进入死循环
                break;
            }
        }
        list[i].next = list[pre].next;
        list[pre].next = i;
    }
    //排序之后list数组应该是降序的
}
void result(LinkedList list[], int num[],int n) {  //将已排序的结果赋给数组
    int j = list[0].next;
    for (int i = n - 1; i >= 0; i--) {  //将元素按照升序序列存入数组中
        num[i] = list[j].value;
        j = list[j].next;
    }
}
void main(){
    int num[12] = { 10,6,2,33,15,12,23,76,1,54,22,9 };
    LinkedList list[LISTSIZE];
    initList(list, num, 12);
    sortList(list);
    result(list, num, 12);
    for (auto x : num) {
        cout << x << " ";
    }
    cout << endl;
    system("pause");
}

本文总阅读量本站访客数人次