zoukankan      html  css  js  c++  java
  • 各种排序算法汇集

    View Code
            private void Sort1(int[] list)//冒泡排序
            {
                //从第一个字符向后冒泡亮亮比较获取最大值放在最后
                //第一次循环首先得到一个最大值;第二次循环得到第二大值
                int i, j, temp;
                bool done = false;
                j = 1;
                while ((j < list.Length) && (!done))
                {
                    done = true;
                    for (i = 0; i < list.Length - j; i++)
                    {
                        if (list[i] > list[i + 1])
                        {
                            done = false;
                            temp = list[i];
                            list[i] = list[i + 1];
                            list[i + 1] = temp;
                        }
                    }
                    j++;
                }
            }
            //选择排序
            //向后冒泡获取最小值的索引,然后和第i个值进行数据交换
            private void Sort2(int[] list)
            {
                int minIndex = 0;
                for (int i = 0; i < list.Length; i++)
                {
                    minIndex = i;
                    for (int j = i; j < list.Length; j++)
                    {
                        if (list[j] < list[minIndex])
                        {
                            minIndex = j;
                        }
                    }
                    int temp = list[i];
                    list[i] = list[minIndex];
                    list[minIndex] = temp;
                }
            }
            //插入排序
            //此种算法是首先循环第二个元素,让第二个元素和第一个元素比较,如果i+1<i,交换。
            //然后依次进行,如果是循环第i个元素,i索引的数据将会和前边所有的数据进行比较,如果i索引数据小于后边的数据,则继续下去知道最后一个进行替换,否则跳出继续下一个;
    
            private void Sort3(int[] list)
            {
                for (int i = 1; i < list.Length; i++)
                {
                    int t = list[i];
                    for (int j = i; j > 0; j--)
                    {
                        if (list[j - 1] > t)
                        {
                            list[j] = list[j - 1];
                            list[j - 1] = t;
                        }
                    }
                }
            }
            private void Sort4(int[] list)//希尔排序
            {
                //list.Length=25;
                int inc;
                for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
                for (; inc > 0; inc = inc / 3)
                {
                    for (int i = inc + 1; i <= list.Length; i += inc)
                    {
                        int t = list[i - 1];
                        int j = i;
                        while ((j > inc) && (list[j - inc - 1] > t))
                        {
                            list[j - 1] = list[j - inc - 1];
                            j -= inc;
                        }
                        list[j - 1] = t;
                    }
                }
            }
            //快速排序
            private void quick_sort(int[] s, int l, int r)
            {
                if (l < r)
                {
                    int i = l, j = r, data = s[l];
                    while (i < j)
                    {
                        while (i < j && s[j] >= data) // 从右向左找第一个小于x的数
                        {
                            j--;
                        }
                        if (i < j)
                        {
                            s[i] = s[j];
                            i++;
                        }
    
                        while (i < j && s[i] < data) // 从左向右找第一个大于等于x的数
                        {
                            i++;
                        }
                        if (i < j)
                        {
                            s[j] = s[i];
                            j--;
                        }
                    }
                    s[i] = data;//第一次循环获取的是左边的数据都比data小的数据,右边的大于data的数据
                    quick_sort(s, l, i - 1); // 递归调用
                    quick_sort(s, i + 1, r);
                }
            }
  • 相关阅读:
    Android架构初探
    TinyPNG---一个压缩PNG的神站
    Android添加全屏启动画面
    如何唯一的标识一台Android设备?
    获取Android设备唯一标识码
    Android系统资源图标android.R.drawable
    Android中使用adb访问SQLite的方法
    Java 对字符串数据进行MD5/SHA1哈希散列运算
    关于Android中EditText自动获取焦点并弹出键盘的相关设置
    EditText自动换行显示内容
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/2650762.html
Copyright © 2011-2022 走看看