zoukankan      html  css  js  c++  java
  • 算法学习

    public void test()
    {
    
    //-------------直接插入排序算法
    Console.WriteLine("---------直接插入排序算法------------
    ");
    showArray();
    
    
    // --------------归并排序算法
    Console.WriteLine("---------归并排序算法------------
    ");
    showArray();
    
    // --------------直接选择排序算法
    Console.WriteLine("---------直接选择排序算法------------
     ");
    showArray();
    
    
    //--------------冒泡排序算法
    Console.WriteLine("---------冒泡排序算法 ------------
    ");
    showArray();
    
    }
    private void showArray()
    {
    int[] arr;
    int[] sorted = null;
    arr = BuilderArray.getArray(1000, 5000);
    Console.WriteLine("数组大小:- " + arr.Length + "- 元素为:");
    int index = 1;
    for (int k = 0; k < arr.Length; k++)
    {
    Console.Write(arr[k] + " ,");
    if (index % 10 == 0)
    Console.WriteLine();
    index++;
    }
    
    DateTime begin = DateTime.Now;
    sorted = Sorted.insertSort(arr);
    Console.WriteLine("
    ----- 排序后: : ");
    index = 1;
    for (int m = 0; m < sorted.Length; m++)
    {// 迭代
    Console.Write(sorted[m] + " ,");
    if (index % 15 == 0)
    Console.WriteLine();
    index++;
    }
    DateTime end = DateTime.Now;
    Console.WriteLine("
    -----排序耗时(s) :" + (( end-begin).Milliseconds+"ms"));
    Console.ReadKey();
    }
    
     
    
    public class BuilderArray
    {
    /**
    * 获得随机大小数组方法
    * @param max_index 最大索引
    * @param max_value 最大值
    * @return disorder 返回数组
    */
    public static int[] getArray(int max_index, int max_value)
    {
    Random random = new Random();
    int index = random.Next(max_index);
    int[] disorder = new int[index];//初始化一个随机大小的数组对象
    for (int i = 0; i < index; i++)
    {
    disorder[i] = random.Next(max_value);
    }
    return disorder;
    }
    }
    
    public class Sorted
    {
    
    /**
    * @category 归并排序算法
    * @param disorder 未排序数组
    * @param order 已排序数组
    * @param disorder_length 未排序数组长度
    * @return 排序数组
    */
    public static int[] mergeSort(int[] disorder, int[] order, int disorder_length)
    {
    int h = 1;
    while (h < disorder_length)
    {
    mergeOrder(disorder, order, disorder_length - 1, h);
    h = 2 * h;
    mergeOrder(order, disorder, disorder_length - 1, h);
    h = 2 * h;
    }
    return order;
    }
    
    /**
    * @category 归并排序算法
    * @param disorder 未排序
    * @param order 已排序
    * @param left 左边索引
    * @param right 右边索引
    * @param end 末尾索引
    */
    private static void merge(int[] disorder, int[] order, int left, int right, int end)
    {
    
    int i = left, j = right + 1, k = left;
    while (i <= right && j <= end)
    {
    if (disorder[i] <= disorder[j])
    {
    order[k++] = disorder[i++]; // 取r[i]和r[j]中较小者放入r1[k]
    }
    else
    {
    order[k++] = disorder[j++];
    }
    }
    if (i <= right)
    {
    while (i <= right)
    { // 若第一个子序列处理完,则进行收尾处理
    order[k++] = disorder[i++];
    }
    }
    else
    {
    while (j <= end)
    { // 若第二个子序列处理完,则进行收尾处理
    order[k++] = disorder[j++];
    }
    }
    }
    /**
    * @category 归并排序算法
    * @param disorder 未排序
    * @param order 已排序
    * @param disorder_length 未排序数组长度
    * @param h 
    */
    private static void mergeOrder(int[] disorder, int[] order, int disorder_length, int h)
    {
    int i = 0;
    while (i <= disorder_length - 2 * h)
    { //待归并记录至少有两个长度为h的子序列
    merge(disorder, order, i, i + h - 1, i + 2 * h - 1);
    i += 2 * h;
    }
    if (i < disorder_length - h)
    {
    merge(disorder, order, i, i + h - 1, disorder_length); //待归并序列中有一个长度小于h
    }
    else
    {
    for (int k = i; k <= disorder_length; k++)
    { //待归并序列中只剩一个子序列
    order[k] = disorder[k];
    }
    }
    }
    
    /**
    * @category 快速排序算法
    */
    
     
    
    /**
    * @category 直接插入排序算法
    * @param disorder 数组
    */
    public static int[] insertSort(int[] disorder)
    {
    int temp = 0;//临时变量
    for (int i = 1; i < disorder.Length; i++)
    {
    int j = i - 1;
    temp = disorder[i];
    for (; j >= 0 && temp < disorder[j]; j--)
    {
    disorder[j + 1] = disorder[j];//替换位置
    }
    disorder[j + 1] = temp;
    }
    return disorder;
    }
    
    
    /**
    * @category 直接选择排序算法
    * @param disorder 数组
    */
    public static int[] selectSort(int[] disorder)
    {
    int i, j, index, temp;
    for (i = 0; i < disorder.Length; i++)
    {
    index = i; //初始化第i趟选择排序的最小记录的指针
    for (j = i + 1; j < disorder.Length; j++)
    { //在无序区选取最小记录
    if (disorder[j] < disorder[index])
    {
    index = j;
    }
    }
    if (index != i)
    { //将最小记录与r[i]交换
    temp = disorder[i];
    disorder[i] = disorder[index];
    disorder[index] = temp;
    }
    }
    return disorder;
    }
    
    /**
    * @category 冒泡排序算法(逻辑简单,适用性不强)
    * @param disorder 数组
    */
    public static int[] bubbleSort(int[] disorder)
    {
    int temp = 0;
    for (int i = 0; i < disorder.Length; i++)
    {
    for (int j = 0; j < disorder.Length - i - 1; j++)
    if (disorder[j] > disorder[j + 1])
    { // 进行两两比较,下面进行符合条件的交换
    temp = disorder[j + 1];
    disorder[j + 1] = disorder[j];
    disorder[j] = temp;
    }
    }
    return disorder;
    }
    }
    

      

  • 相关阅读:
    SAP Spartacus 自定义Popover指令,如何实现弹出对话框自动关闭功能
    SAP Spartacus B2B 页面信息提示图标的弹出窗口显示实现逻辑
    一个好用的 SAP UI5 本地打包(build)工具,自动生成Component-preload.js
    什么是 SAP UI5 的 Component-preload.js, 什么是Minification和Ugification
    云小课 | 一个三分钟快速定制OCR应用的神器,要不?
    JavaScript实现:如何写出漂亮的条件表达式
    想做测试工程师,这7件事你必须先知道
    比物理线程都好用的C++20的协程,你会用吗?
    解读 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的迁移
    数据中心太耗电,送你一个节能神器
  • 原文地址:https://www.cnblogs.com/linsong521/p/4692579.html
Copyright © 2011-2022 走看看