zoukankan      html  css  js  c++  java
  • 多目标遗传算法 ------ NSGA-II (部分源码解析) 快速排序代码 sort.c

     1 /* Routines for randomized recursive quick-sort */
     2 
     3 # include <stdio.h>
     4 # include <stdlib.h>
     5 # include <math.h>
     6 
     7 # include "global.h"
     8 # include "rand.h"
     9 
    10 /* Randomized quick sort routine to sort a population based on a particular objective chosen */
    11 void quicksort_front_obj(population *pop, int objcount, int obj_array[], int obj_array_size)
    12 {
    13   q_sort_front_obj (pop, objcount, obj_array, 0, obj_array_size-1);
    14   return;
    15 }
    16 
    17 /* Actual implementation of the randomized quick sort used to sort a population based on a particular objective chosen */
    18 void q_sort_front_obj(population *pop, int objcount, int obj_array[], int left, int right)
    19 {
    20     int index;
    21     int temp;
    22     int i, j;
    23     double pivot;
    24     if (left<right)
    25     {
    26         index = rnd (left, right);
    27         temp = obj_array[right];
    28         obj_array[right] = obj_array[index];
    29         obj_array[index] = temp;
    30         pivot = pop->ind[obj_array[right]].obj[objcount];
    31         i = left-1;
    32         for (j=left; j<right; j++)
    33         {
    34             if (pop->ind[obj_array[j]].obj[objcount] <= pivot)
    35             {
    36                 i+=1;
    37                 temp = obj_array[j];
    38                 obj_array[j] = obj_array[i];
    39                 obj_array[i] = temp;
    40             }
    41         }
    42         index=i+1;
    43         temp = obj_array[index];
    44         obj_array[index] = obj_array[right];
    45         obj_array[right] = temp;
    46         q_sort_front_obj (pop, objcount, obj_array, left, index-1);
    47         q_sort_front_obj (pop, objcount, obj_array, index+1, right);
    48     }
    49     return;
    50 }

    按照个体的不同  目标函数 序号(objcount),  对种群序号数组obj_array按照拥挤距离进行快速排序。

     1 /* Randomized quick sort routine to sort a population based on crowding distance */
     2 void quicksort_dist(population *pop, int *dist, int front_size)
     3 {
     4   q_sort_dist (pop, dist, 0, front_size-1);
     5   return;
     6 }
     7 
     8 /* Actual implementation of the randomized quick sort used to sort a population based on crowding distance */
     9 void q_sort_dist(population *pop, int *dist, int left, int right)
    10 {
    11     int index;
    12     int temp;
    13     int i, j;
    14     double pivot;
    15     if (left<right)
    16     {
    17         index = rnd (left, right);
    18         temp = dist[right];
    19         dist[right] = dist[index];
    20         dist[index] = temp;
    21         pivot = pop->ind[dist[right]].crowd_dist;
    22         i = left-1;
    23         for (j=left; j<right; j++)
    24         {
    25             if (pop->ind[dist[j]].crowd_dist <= pivot)
    26             {
    27                 i+=1;
    28                 temp = dist[j];
    29                 dist[j] = dist[i];
    30                 dist[i] = temp;
    31             }
    32         }
    33         index=i+1;
    34         temp = dist[index];
    35         dist[index] = dist[right];
    36         dist[right] = temp;
    37         q_sort_dist (pop, dist, left, index-1);
    38         q_sort_dist (pop, dist, index+1, right);
    39     }
    40     return;
    41 }

    将带排序的个体索引序号  按照  拥挤距离  排序。(快速排序法)

  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/6264909.html
Copyright © 2011-2022 走看看