zoukankan      html  css  js  c++  java
  • 数据结构——基本排序汇总

      1 #include <stdio.h>
      2 
      3 #define N 100
      4 
      5 void print1(int a[], int len)
      6 {
      7     int i;
      8 
      9     for(i = 0; i < len; i++)
     10     {
     11         printf("%d ", a[i]);
     12     }
     13 
     14     printf("
    ");
     15 
     16 }
     17 
     18 void print2(int a[], int len)
     19 {
     20     int i;
     21 
     22     for(i = 1; i <= len; i++)
     23     {
     24         printf("%d ", a[i]);
     25     }
     26 
     27     printf("
    ");
     28 
     29 }
     30 
     31 int Swap(int *a, int *b)
     32 {
    
     33     int temp;
     34 
     35     temp = *a;
     36     *a = *b;
     37     *b = temp;
     38 
     39     return 0;
     40 }
     41 
     42 int InsertSort(int a[], int len)
     43 {
     44     int i, j;
     45 
     46     for(i = 1; i < len; i++)
     47     {
     48         for(j = i - 1; j >= 0; j--)
     49         {
     50             if(a[j] > a[j + 1])
     51             {
     52                 Swap(&a[j], &a[j + 1]);
     53             }
     54         }
     55     }
     56 
     57     return 0;
     58 }
     59 
     60 int ShellSort(int a[], int len)
     61 {
     62     int i, j, dt;
     63 
     64     for(dt = len / 2; dt > 0; dt = dt / 2)
     65     {
     66         for(i = dt; i < len; i++)
     67         {
     68             for(j = i - dt; j >= 0; j -= dt)
     69             {
     70                 if(a[j] > a[j + dt])
     71                 {
     72                     Swap(&a[j], &a[j + dt]);
     73                 }
     74             }
     75         }
     76     }
     77 
     78     return 0;
     79 }
     80 
     81 
     82 int SelectSort(int a[], int len)
     83 {
     84     int i, j, min;
     85     
     86     for(i = 0; i < len; i++)
     87     {
     88         min = i;
     89         
     90         for(j = i + 1; j < len; j++)
     91         {
     92             if(a[min] > a[j])
     93             {
     94                 min = j;
     95             }
     96         }
     97 
     98         Swap(&a[min], &a[i]);
     99     }
    100 
    101     return 0;
    102 }
    103 
    104 int HeapModify(int a[], int i, int len)
    105 {
    106     int temp = i;
    107     int lchild = 2 * i;
    108     int rchild = 2 * i + 1;
    109 
    110     
    111     if(a[lchild] > a[temp] && lchild < len)
    112     {
    113         temp = lchild;
    114     }
    115 
    116     if(a[rchild] > a[temp] && rchild < len)
    117     {
    118         temp = rchild;            
    119     }
    120     
    121     if(temp != i)
    122     {
    123         Swap(&a[temp], &a[i]);
    124         HeapModify(a, temp, len);
    125     }
    126 
    127     return 0;
    128 }
    129 
    130 
    131 int HeapSort(int a[], int len)
    132 {
    133     int i;
    134 
    135     for(i = len / 2 - 1; i >= 0; i--)
    136     {
    137         HeapModify(a, i, len);
    138     }
    139 
    140     for(i = len - 1; i > 0; i--)
    141     {
    142         Swap(&a[0], &a[i]);
    143         HeapModify(a, 0, i);
    144 
    145         printf("中间过程:");
    146         print1(a, len);
    147 
    148     }
    149     
    150 
    151     return 0;
    152 }
    153 
    154 int partition(int a[], int low, int high)
    155 {
    156 
    157     int privot = a[low];
    158 
    159     while(low < high)
    160     {
    161         while(low < high && a[high] > privot)
    162         {
    163             high--;
    164         }
    165 
    166         if(low < high)
    167         {
    168             a[low++] = a[high];
    169         }
    170 
    171         
    172 
    173         while(low < high && a[low] < privot)
    174         {
    175             low++;
    176         }
    177 
    178         if(low < high)
    179         {
    180             a[high--] = a[low];
    181         }
    182 
    183         
    184     }
    185 
    186     a[low] = privot;
    187 
    188     return low;
    189 }
    190 
    191 int QuickSort(int a[], int low, int high)
    192 {
    193     int privot;
    194 
    195     if(low < high)
    196     {
    197         privot = partition(a, low, high);
    198         QuickSort(a, low, privot - 1);
    199         QuickSort(a, privot + 1, high);
    200     }
    201     
    202 
    203     return 0;
    204 }
    205 
    206 void main()
    207 {
    208     int a[N];;
    209     int i;
    210     int len;
    211 
    212     printf("请输入需要排序的数字个数:
    ");
    213     scanf("%d", &len);
    214 
    215     printf("请输入排序的数值:
    ");
    216     for(i = 0; i < len; i++)
    217     {
    218         scanf("%d", &a[i]);
    219     }
    220 
    221     printf("排序开始:
    ");
    222     printf("before:");
    223     print1(a, len);
    224 
    225     
    226 //    InsertSort(a, num);
    227 //    ShellSort(a, num);
    228 //    SelectSort(a, num);
    229 //    HeapSort(a, len);
    230     QuickSort(a, 0, len - 1);
    231 
    232     
    233     printf("排序完成:
    ");
    234     printf("after:");
    235     print1(a, len);
    236 
    237 
    238 }
  • 相关阅读:
    每日一篇文献:Robotic pick-and-place of novel objects in clutter with multi-affordance grasping and cross-domain image matching
    每日一篇文献:Intuitive Bare-Hand Teleoperation of a Robotic Manipulator Using Virtual Reality and Leap Motion
    每日一篇文献:Virtual Kinesthetic Teaching for Bimanual Telemanipulation
    HEBI Robotic Arm VR Teleoperation
    「iQuotient Case」AR device teleoperated robotic arm
    VR and Digital Twin Based Teleoperation of Robotic Arm
    HEBI Robotic Arm VR Teleoperation
    Human Robot Interaction
    Immersive Teleoperation Project
    机器人演示学习
  • 原文地址:https://www.cnblogs.com/jiangjh/p/3404369.html
Copyright © 2011-2022 走看看