zoukankan      html  css  js  c++  java
  • 排序算法

    对一个固定长度的数组或者一块连续空间存储的乱序的结构进行排序。

    1、直接插入排序

    typedef struct{
        int key;
        float info;
    }JD;
    
    void straightsort(JD r [], int n)
    {
        int i,j;
        for (i = 2; i <= n ; i++)
        {
            r[0] = r[i];
            j = i-1;
            while(r[0].key < r[j].key)
            {
                r[j+1] = r[j];
                j--;
             }
             r[j+1] = r[0];
        }
    }

    相对应的链表排序的方法如下:

    struct ListNode* sortList(struct ListNode* head){
        if (head == NULL || head->next == NULL)
            return head;
        
        struct ListNode *sort_pre = head;
        struct ListNode *cur = head->next;
        struct ListNode *cur_pre = head;
        struct ListNode *tmp = cur;
        struct ListNode *sort = head;
        
        while(cur) {
            tmp = cur->next;
            while (sort != cur && sort->val < cur->val) {
                sort_pre = sort;
                sort = sort->next;
            }
            
            if (sort == cur) {
                cur_pre = cur;
                goto finish;
            }
            
            if (sort == head) {           
                cur_pre->next = cur->next;
                cur->next = sort;
                head = cur;
                goto finish;
            }
            
            if (sort != cur) {
                cur_pre->next = cur->next;
                sort_pre->next = cur;
                cur->next = sort;
            }
             
    finish:
            cur = tmp;
            sort = head;
            sort_pre = head;
        }
        
        return head;
    }

    为了验证链表插入排序的算法,还写了数组构造成链表的方法,代码如下:

    struct ListNode{
        int val;
        struct ListNode *next;
    };
    
    struct ListNode * create_list(int *array, int n) {
        int i;
        struct ListNode *head = malloc(sizeof(struct ListNode));
        struct ListNode *node;
        struct ListNode *cur = head;
        head->val = array[0];
        head->next = NULL;
    
        for(i = 1; i < n; i++)
        {
            node = malloc(sizeof(struct ListNode));
            node->val = array[i];
            node->next = NULL;
            cur->next = node;
            cur = node;
        }
    
        return head;
    }
    
    void print_list(struct ListNode * head)
    {
        struct ListNode *cur = head;
        while(cur)
        {
            printf("%d
    ", cur->val);
            cur = cur->next;
        }
    }
  • 相关阅读:
    阅读《构建之法》1-5章
    构建之法第8,9,10章
    实验5-封装与测试2
    第六次作业-my Backlog
    保存内容
    实验四-单元测试
    实验3—修改版
    做汉堡-57号
    实验3-2
    201306114357-实验3-C语言
  • 原文地址:https://www.cnblogs.com/xingmuxin/p/11315233.html
Copyright © 2011-2022 走看看