zoukankan      html  css  js  c++  java
  • C#对象数组排序方法

    #实现数组的排序

    一个排序的类,用了几种方式实现的。

    1using System;
    2
    3namespace DataStruct
    4{
    5 public class Sorter
    6 {
    7 /**//// <summary>
    8 /// 冒泡排序法1
    9 /// </summary>
    10 /// <param name="list"></param>
    11 public static void BubbleSort(int[] list)
    12 {
    13 for (int i = 0; i < list.Length; i++)
    14 {
    15 for (int j = i; j < list.Length; j++)
    16 {
    17 if (list[i] < list[j])
    18 {
    19 int temp = list[i];
    20 list[i] = list[j];
    21 list[j] = temp;
    22 }
    23 }
    24 }
    25 }
    26
    27 /**//// <summary>
    28 /// 插入排序法
    29 /// </summary>
    30 /// <param name="list"></param>
    31 public static void InsertionSort(int[] list)
    32 {
    33 for (int i = 1; i < list.Length; i++)
    34 {
    35 int t = list[i];
    36 int j = i;
    37 while ((j > 0) && (list[j - 1] > t))
    38 {
    39 list[j] = list[j - 1];
    40 --j;
    41 }
    42 list[j] = t;
    43 }
    44
    45 }
    46
    47 /**//// <summary>
    48 /// 选择排序法
    49 /// </summary>
    50 /// <param name="list"></param>
    51 public static void SelectionSort(int[] list)
    52 {
    53 int min;
    54 for (int i = 0; i < list.Length - 1; i++)
    55 {
    56 min = i;
    57 for (int j = i + 1; j < list.Length; j++)
    58 {
    59 if (list[j] < list[min])
    60 min = j;
    61 }
    62 int t = list[min];
    63 list[min] = list[i];
    64 list[i] = t;
    65 }
    66
    67 }
    68
    69 /**//// <summary>
    70 /// 希尔排序法
    71 /// </summary>
    72 /// <param name="list"></param>
    73 public static void ShellSort(int[] list)
    74 {
    75 int inc;
    76 for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
    77 for (; inc > 0; inc /= 3)
    78 {
    79 for (int i = inc + 1; i <= list.Length; i += inc)
    80 {
    81 int t = list[i - 1];
    82 int j = i;
    83 while ((j > inc) && (list[j - inc - 1] > t))
    84 {
    85 list[j - 1] = list[j - inc - 1];
    86 j -= inc;
    87 }
    88 list[j - 1] = t;
    89 }
    90 }
    91 }
    92
    93 private static void Swap(ref int l, ref int r)
    94 {
    95 int s;
    96 s = l;
    97 l = r;
    98 r = s;
    99 }
    100
    101 /**//// <summary>
    102 /// 快速排序法
    103 /// </summary>
    104 /// <param name="list"></param>
    105 /// <param name="low"></param>
    106 /// <param name="high"></param>
    107 public static void Sort(int[] list, int low, int high)
    108 {
    109 int pivot;
    110 int l, r;
    111 int mid;
    112 if (high <= low)
    113 return;
    114 else if (high == low + 1)
    115 {
    116 if (list[low] > list[high])
    117 Swap(ref list[low], ref list[high]);
    118 return;
    119 }
    120 mid = (low + high) >> 1;
    121 pivot = list[mid];
    122 Swap(ref list[low], ref list[mid]);
    123 l = low + 1;
    124 r = high;
    125 do
    126 {
    127 while (l <= r && list[l] < pivot)
    128 l++;
    129 while (list[r] >= pivot)
    130 r--;
    131 if (l < r)
    132 Swap(ref list[l], ref list[r]);
    133 } while (l < r);
    134 list[low] = list[r];
    135 list[r] = pivot;
    136 if (low + 1 < r)
    137 Sort(list, low, r - 1);
    138 if (r + 1 < high)
    139 Sort(list, r + 1, high);
    140 }
    141 }
    142}
    143

    C#对象数组排序方法

    排序是编程中常用的法算之一,排序的方法有很多种,下面介绍一种简单有效的排序方法,代码如下:
    private bool isReverse = false;
    private void Sort(PersonalNotificationEntity [] list,string key)
    {
    if ( isReverse )
    {
    Array.Reverse(list);
    isReverse = false;
    }
    else
    {
    int len = list.Length;
    Type type = typeof(PersonalNotificationEntity);
    object [] keys = new object[len];
    for(int i = 0 ; i < len ; i++)
    {
    keys[i] = type.InvokeMember(key,BindingFlags.GetField ,null,list[i],null);
    }
    Array.Sort(keys,list);
    isReverse = true;
    }
    }
    这里使用了Array.Sort()和Array.Reverse()方法对数据进行正/反排序,变量isReverse做为反排序的标志位
    方法传入了2个参数,一个是要排序的对象数组list,一个是排序关键字key,即要对象的根据哪个属性或字段来进行排序(这个值是等于对象的属性/字段名)
    type.InvokeMember()方法可以得到对象实例的属性/字段值,这里使用的是字段
    在得到数组中的每一个要排序的字段值后,把这个字段值数组做为Array.Sort()方法的参数传入,Sort方法就会将对象数按这个字段的值进行排序。  

    转载
  • 相关阅读:
    Git远程和分支管理
    Git基本使用教程
    linux基础知识总结
    正则表达式-概要
    java注释规范
    JavaScript对象(Object)
    centos7安装docker
    springboot项目问题记录one
    tomcat不需要重启热部署xml文件
    java调用新浪接口根据Ip查询所属地区
  • 原文地址:https://www.cnblogs.com/zhuawang/p/743517.html
Copyright © 2011-2022 走看看