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 }
  • 相关阅读:
    软件项目版本号的命名规则及格式
    你必须知道的C#的25个基础概念
    Visual C#常用函数和方法集汇总
    web标准下的web开发流程思考
    设计模式(5)>模板方法 小强斋
    设计模式(9)>迭代器模式 小强斋
    设计模式(10)>策略模式 小强斋
    设计模式(8)>代理模式 小强斋
    设计模式(7)>观察者模式 小强斋
    设计模式(7)>观察者模式 小强斋
  • 原文地址:https://www.cnblogs.com/jiangjh/p/3404369.html
Copyright © 2011-2022 走看看