欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

冒泡排序/选择排序/插入排序(c#)

程序员文章站 2022-06-30 14:04:18
恢复内容开始 每次看这些排序都像没见过一样,完全理解不了,可是不久前明明了解的十分透彻。记下来记下来记下来! 1>>>冒泡排序:相邻的两两相比 把大的(或者小的)放后边,这样一轮下来,最下边的肯定是最大的数(或者最小的数)。重复arr.length次就能把arr按有序排列了。 2>>>选择排序:从第 ......

---恢复内容开始---

每次看这些排序都像没见过一样,完全理解不了,可是不久前明明了解的十分透彻。记下来记下来记下来!

1>>>冒泡排序:相邻的两两相比 把大的(或者小的)放后边,这样一轮下来,最下边的肯定是最大的数(或者最小的数)。重复arr.length次就能把arr按有序排列了。

class Program
    {
        static void Main(string[] args)
        {

            int[] arr = new int[] { 22, 11, 2, 9, 6 };
            MP(arr);//调用方法
            foreach (var v in arr) {   //调用方法重新排序后 的数组循环输出
                Console.WriteLine(v);
            }
            Console.ReadLine();
        }
        //冒泡排序的方法
        public static void MP(int[] a)
        {
            int temp;
            for (var i = 0; i < a.Length-1; i++)//外层循环,比较四轮。每轮筛出一个放在最后。
{ for (var j = 0; j < a.Length - 1 - i; j++)//内层循环,两两比较,因为外层循环 每轮会确定出一个放在最后。 //所以每轮就多一个不用比较的数,所以a.Length-1-i。 { if (a[j] > a[j + 1]) //因为这里需要与自己的下一位作比较,所以上边的a.Lengths索引必须-1.要不然会超出数组长度 { temp = a[j]; //这三句话: 条件成立时,俩数调位置。 a[j] = a[j + 1]; a[j + 1] = temp; } } } } }

2>>>选择排序:从第一个数开始 依次将每个数 与他后边的数比较 并记录比较出的最小(最大)的数,然后交换位置。每轮下来就有一个最小(或最大)的数在【当前轮中的】第一位。这样比较结束时就是一个有序的数列。

class Program
{ static void Main(string[] args) { int[] arr = new int[] { 22, 11, 2, 9, 6 }; XZ(arr); foreach (var v in arr)//调用方法重新排序后 的数组循环输出 { Console.WriteLine(v); } Console.ReadLine(); } //选择排序的方法 public static void XZ(int [] a)
{ int temp; int min; for (int i = 0; i < a.Length -1; i++) //循环使用每个数 与后边的数比较(最后一个后边没有,所以a.Length-1) { min = i; //min用来 动态存放 最小的数的索引,直到她真的存放了一个最小数 for (int j = i + 1; j < a.Length; j++) //从第一个数的下一个 循环与第一个比较 { if (a[j] < a[min]) //当有小于第一个数的元素时, { min = j; //记录下这个数的索引,放在min中。继续内部循环 } //内部循环作用是记录最小数的索引(这很重要) } temp = a[min]; //把最小的那个数存起来 a[min] = a[i]; //把【当前轮】第一位的数放在 最小数的位置 a[i] = temp; //把最小数放在【当前轮】第一位 } }
}