zoukankan      html  css  js  c++  java
  • 排序

    1.选择排序法对一维数组进行排序
    if (G_int_value != null)
    {
    int min;//定义一个int变量,用来存储数组下标
    for (int i = 0; i < G_int_value.Length - 1; i++)//循环访问数组中的元素值(除最后一个)
    {
    min = i;//为定义的数组下标赋值
    for (int j = i + 1; j < G_int_value.Length; j++)//循环访问数组中的元素值(除第一个)
    {
    if (G_int_value[j] < G_int_value[min])//判断相邻两个元素值的大小
    min = j;
    }
    int t = G_int_value[min];//定义一个int变量,用来存储比较大的数组元素值
    G_int_value[min] = G_int_value[i];//将小的数组元素值移动到前一位
    G_int_value[i] = t;//将int变量中存储的较大的数组元素值向后移
    }
    txt_str2.Clear();//清空控件内字符串
    foreach (int i in G_int_value)//遍历字符串集合
    {
    txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
    }
    }
    else
    {
    MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
    }
    2.冒泡排序法对一维数组进行排序
    if (G_int_value != null)
    {
    //定义两个int类型的变量,分别用来表示数组下标和存储新的数组元素
    int j, temp;
    for (int i = 0; i < G_int_value.Length - 1; i++)//根据数组下标的值遍历数组元素
    {
    j = i + 1;
    id://定义一个标识,以便从这里开始执行语句
    if (G_int_value[i] > G_int_value[j])//判断前后两个数的大小
    {
    temp = G_int_value[i];//将比较后大的元素赋值给定义的int变量
    G_int_value[i] = G_int_value[j];//将后一个元素的值赋值给前一个元素
    G_int_value[j] = temp;//将int变量中存储的元素值赋值给后一个元素
    goto id;//返回标识,继续判断后面的元素
    }
    else
    if (j < G_int_value.Length - 1)//判断是否执行到最后一个元素
    {
    j++;//如果没有,则再往后判断
    goto id;//返回标识,继续判断后面的元素
    }
    }
    txt_str2.Clear();//清空控件内字符串
    foreach (int i in G_int_value)//遍历字符串集合
    {
    txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
    }
    }
    else
    {
    MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
    }
    3.快速排序法对一维数组进行排序
    private int[] G_int_value;//定义数组字段

    private Random G_Random = new Random();//创建随机数对象

    //交换数据
    private void swap(ref int l, ref int r)
    {
    int temp;//临时值
    temp = l;//记录前一个值
    l = r;//记录后一个值
    r = temp;//前后交换数据
    }

    private void Sort(int[] list, int low, int high)
    {
    int pivot;//临时变量,用来存储最大值
    int l, r;//分别用来记录遍历到的索引和最大索引
    int mid;//中间索引
    if (high <= low)//判断输入的值是否合法
    return;
    else if (high == low + 1)//判断两个索引是否相邻
    {
    if (list[low] > list[high])//判断前面的值是否大于后面的值
    swap(ref list[low], ref list[high]);//交换前后索引的值
    return;
    }
    mid = (low + high) >> 1;//记录数组的中间索引
    pivot = list[mid];//初始化临时变量的值
    swap(ref list[low], ref list[mid]);//交换第一个值和中间值的索引顺序
    l = low + 1;//记录遍历到的索引值
    r = high;//记录最大索引
    try
    {
    //使用do...while循环遍历数组,并比较前后值的大小
    do
    {

    while (l <= r && list[l] < pivot)//判断遍历到的索引是否小于最大索引
    l++;//索引值加1
    while (list[r] >= pivot)//判断最大值是否大于等于记录的分支点
    r--;//做大索引值减1
    if (l < r)//如果当前遍历到的值小于最大值
    swap(ref list[l], ref list[r]);//交换顺序

    } while (l < r);
    list[low] = list[r];//在最小索引处记录最小值
    list[r] = pivot;//在最大索引处记录最大值
    if (low + 1 < r)//判断最小索引是否小于最大索引
    Sort(list, low, r - 1);//调用自身进行快速排序
    if (r + 1 < high)//判断最大索引是否小于数组长度
    Sort(list, r + 1, high);//调用自身进行快速排序
    }
    catch { }
    }
    4.直接插入法对一维数组进行排序
    if (G_int_value != null)
    {
    for (int i = 0; i < G_int_value.Length; ++i)//循环访问数组中的元素
    {
    int temp = G_int_value[i];//定义一个int变量,并使用获得的数组元素值赋值
    int j = i;
    while ((j > 0) && (G_int_value[j - 1] > temp))//判断数组中的元素是否大于获得的值
    {
    G_int_value[j] = G_int_value[j - 1];//如果是,则将后一个元素的值提前
    --j;
    }
    G_int_value[j] = temp;//最后将int变量存储的值赋值给最后一个元素
    }
    txt_str2.Clear();//清空控件内字符串
    foreach (int i in G_int_value)//遍历字符串集合
    {
    txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
    }
    }
    else
    {
    MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
    }
    5.希尔排序法对一维数组进行排序
    if (G_int_value != null)
    {
    int inc;//定义一个int变量,用来确定每个有序序列的个数
    for (inc = 1; inc <= G_int_value.Length / 9; inc = 3 * inc + 1) ;//为有序序列赋值
    for (; inc > 0; inc /= 3)
    {
    for (int i = inc + 1; i <= G_int_value.Length; i += inc)
    {
    int t = G_int_value[i - 1];//记录当前值
    int j = i;//定义下一个索引
    while ((j > inc) && (G_int_value[j - inc - 1] > t))
    {
    G_int_value[j - 1] = G_int_value[j - inc - 1];//交换数据
    j -= inc;
    }
    G_int_value[j - 1] = t;//将下一个元素值设置为当前值
    }
    }
    txt_str2.Clear();//清空控件内字符串
    foreach (int i in G_int_value)//遍历字符串集合
    {
    txt_str2.Text += i.ToString() + ", ";//向控件内添加字符串
    }
    }
    else
    {
    MessageBox.Show("首先应当生成数组,然后再进行排序。", "提示!");
    }

  • 相关阅读:
    软件工程第一次作业
    软工热身作业
    OO第四单元
    面向对象——规格总结
    OO电梯作业总结
    JAVA实现表达式求导运算的分析总结
    提问回顾与个人总结
    Flutter的环境配置以及一些常见问题
    软件案例分析
    软件工程结对作业
  • 原文地址:https://www.cnblogs.com/jxyZ/p/3197065.html
Copyright © 2011-2022 走看看