排序算法之冒泡排序、选择排序
2010-04-08 00:05
274 查看
辞职后今天第一次参加前端开发工程师的面试,本来自己主要是搞后台开发的,不准备去,奈何对方的诚意,还是抱着试试看去的状态去了,后果可想而知,被问到列举几个排序算法,只说出排序算法,惭愧,做了这么久开发,有些基础的东西竟然淡忘,自己确实还需要多扎实基础的东西。这不写两个常用的算法练习下。
冒泡排序已知一组无序数据a[1]、a[2]、……a
,需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],依此类推,最后比较a[n-1]与a
的值。这样处理一轮后,a
的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a
就以升序排列了。优点:稳定,比较次数已知;缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。
选择排序已知一组无序数据a[1]、a[2]、……a
,需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变。再比较a[1]与a[4],依此类推,最后比较a[1]与a
的值。这样处理一轮后,a[1]的值一定是这组数据中最小的。再将a[2]与a[3]~a
以相同方法比较一轮,则a[2]的值一定是a[2]~a
中最小的。再将a[3]与a[4]~a
以相同方法比较一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a
就以升序排列了。
下面贴出代码:
代码
冒泡排序已知一组无序数据a[1]、a[2]、……a
,需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],依此类推,最后比较a[n-1]与a
的值。这样处理一轮后,a
的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a
就以升序排列了。优点:稳定,比较次数已知;缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。
选择排序已知一组无序数据a[1]、a[2]、……a
,需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变。再比较a[1]与a[4],依此类推,最后比较a[1]与a
的值。这样处理一轮后,a[1]的值一定是这组数据中最小的。再将a[2]与a[3]~a
以相同方法比较一轮,则a[2]的值一定是a[2]~a
中最小的。再将a[3]与a[4]~a
以相同方法比较一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a
就以升序排列了。
下面贴出代码:
代码
using System; using System.Text; namespace SortArithmetic { public class MyClass { public static void Main() { int[] Nums = RandomNums(3, 27); ShowNums("原数组是: ", Nums); //ShowNums("排序后是:", BubbleSort(Nums)); ShowNums("排序后是:", SelectSort(Nums)); Console.ReadLine(); } #region 生成随机int数组 private static int[] RandomNums(int Length, int Count) { Random Rand = new Random(7); int[] Nums = new int[Count]; for (int c = 0; c < Count; c++) { string Result = string.Empty; for (int i = 0; i < Length; i++) { Result += Rand.Next(10).ToString(); } Nums[c] = Convert.ToInt32(Result); } return Nums; } #endregion #region 排序算法:冒泡排序(升序) 排序次数可计算:int ,n为5那么 6*(6-1)/2 private static int[] BubbleSort(int[] Nums) { for (int c = 0; c < Nums.Length-1; c++) { for (int i = 0; i < Nums.Length - c - 1; i++) { int Temp = Nums[i + 1]; if (Nums[i] > Nums[i + 1]) { Nums[i + 1] = Nums[i]; Nums[i] = Temp; } } } return Nums; } #endregion #region 排序算法:选择排序(升序) private static int[] SelectSort(int[] Nums) { for (int c = 0; c < Nums.Length-1; c++) { for (int i = c; i < Nums.Length - 1; i++) { int Temp = Nums[i+1]; if (Nums[c] > Nums[i + 1]) { Nums[i + 1] = Nums[c]; Nums[c] = Temp; } } } return Nums; } #endregion private static void ShowNums(string Msgs, int[] Nums) { Console.Write(Msgs); foreach (int n in Nums) { Console.Write(n.ToString() + " "); } Console.WriteLine(); } } }
相关文章推荐
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 3种排序算法的可视化 冒泡排序 选择排序 快速排序 转自自己另一个帐号
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
- 常见算法:C语言中的排序算法--冒泡排序,选择排序,希尔排序
- C语言中的排序算法--冒泡排序,选择排序,希尔排序
- python排序算法-冒泡排序,选择排序,直接插入排序,希尔排序,归并排序,快速排序,堆排序
- Java常用排序算法冒泡排序与选择排序总结
- 排序算法:冒泡排序、插入排序、选择排序、快速排序对比
- 面试最基本的三种排序算法 冒泡排序 插入排序 选择排序
- 基本排序算法(冒泡排序,选择排序,插入排序)后续[时间测试]
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序算法‘冒泡排序,选择排序,快速排序’
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- java实现各种排序算法(包括冒泡排序,选择排序,插入排序,快速排序(简洁版))及性能测试