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

C#代码实现-冒泡排序

程序员文章站 2023-11-07 16:49:28
冒泡排序原理:(升序)通过当前位置数和后一个位置数进行比较 如果当前数比后一个数大 则交换位置, 完成后 比较基数的位置变成下一个数。直到数组末尾,当程序运行完第一遍 最大的数已经排序到最后一个位置了。次数可以减少循环数不用管最后一个数 降序排序同理 不过是把比较方式变成判断当前数是否小于下一个数 ......

冒泡排序原理:(升序)通过当前位置数和后一个位置数进行比较 如果当前数比后一个数大 则交换位置, 完成后 比较基数的位置变成下一个数。直到数组末尾,当程序运行完第一遍 最大的数已经排序到最后一个位置了。次数可以减少循环数不用管最后一个数

降序排序同理 不过是把比较方式变成判断当前数是否小于下一个数 如果小于则交换

下面直接上代码

 

 

双重循环方式:

 1 using system;
 2 using system.collections.generic;
 3 
 4 namespace testconsole
 5 {
 6     class program
 7     {
 8         static void main(string[] args)
 9         {
10             //创建一个乱序数组
11             list<int> ints = new list<int> { 1, 2, 3, 4, 8, 6, 4, 1, 0, 5, 5, 0, 5, 1, 16, 1, 32, 1, 54, 68, 4, 21, 56, 14, 856, 48, 6, 12, 3, 5 };
12 
13             //获取数组长度
14             int count = ints.count;
15 
16             //外圈循环 数组有多少个数就循环多少次  每完成一次内部循环减少一次外部循环(最后一个数以经是最大  不用参与比较了)
17             for (int i = count; i > 0; i--)
18             {
19                 //内部循环  比较当前位置数和下一个位置的数大小
20                 for (int j = 0; j < i; j++)
21                 {
22                     //判断是否到数组尾
23                     if (j + 1 == i) continue;
24                     //判断当前数是否比下一个数大
25                     if (ints[j] > ints[j + 1])
26                     {
27                         //把当前数替换到临时变量
28                         var t = ints[j];
29                         //把下一个数替换到当前位置
30                         ints[j] = ints[j + 1];
31                         //把临时变量替换到下一个数的位置
32                         ints[j + 1] = t;
33                     }
34                 }
35                 //减少外圈循环
36                 count--;
37             }
38             console.writeline(string.join(",", ints)/*string.join("分隔符",对象数组)  用于把数组元素分割成字符串*/ );
39             console.readkey();
40         } 
41     }
42 }

while实现方式:

 1 using system;
 2 using system.collections.generic;
 3 
 4 namespace testconsole
 5 {
 6     class program
 7     {
 8         static void main(string[] args)
 9         { 
10             //创建一个乱序数组
11             list<int> ints = new list<int> { 1, 2, 3, 4, 8, 6, 4, 1, 0, 5, 5, 0, 5, 1, 16, 1, 32, 1, 54, 68, 4, 21, 56, 14, 856, 48, 6, 12, 3, 5 };
12 
13             //获取数组长度
14             int count = ints.count;
15 
16             //外圈循环 数组有多少个数就循环多少次  每完成一次内部循环减少一次外部循环(最后一个数以经是最大  不用参与比较了)
17             while (count > 0)
18             {
19                 //内部循环  比较当前位置数和下一个位置的数大小
20                 for (int j = 0; j < count; j++)
21                 {
22                     //判断是否到数组尾
23                     if (j + 1 == count) continue;
24                     //判断当前数是否比下一个数大
25                     if (ints[j] > ints[j + 1])
26                     {
27                         //把当前数替换到临时变量
28                         var t = ints[j];
29                         //把下一个数替换到当前位置
30                         ints[j] = ints[j + 1];
31                         //把临时变量替换到下一个数的位置
32                         ints[j + 1] = t;
33                     }
34                 }
35                 //减少外圈循环
36                 count--;
37             } 
38             console.writeline(string.join(",", ints)/*string.join("分隔符",对象数组)  用于把数组元素分割成字符串*/ );
39             console.readkey();
40         }
41     }
42 }

纯属个人理解,如果偏差请各位大佬指正~~~~