冒泡排序
部分内容引用自 知乎:程序员贺同学 整理的C++八股文
↑ 他总结分享的很棒
(1)冒泡排序
算法描述:
- ⽐较相邻的元素。如果第⼀个⽐第⼆个⼤,就交换它们两个;
- 对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对,这样在最后的元素应
- 该会是最⼤的数;
- 针对所有的元素᯿复以上的步骤,除了最后⼀个;
- ᯿复步骤 1~3,直到排序完成。
⽤⼀个例⼦,带你看下冒泡排序的整个过程。我们要对⼀组数据 4,5,6,3,2,1,从⼩到
到⼤进⾏排序。第⼀次冒泡操作的详细过程就是这样
可以看出,经过⼀次冒泡操作之后,6 这个元素已经存储在正确的位置上。要想完成所有数据
的排序,我们只要进⾏ 6 次这样的冒泡操作就⾏了。
#include <iostream> #include <vector> void BubbleSort(std::vector<int> &nums) { int n = nums.size(); if (n <= 1) return; bool is_swap; for (int i = 1; i < n; ++i) { is_swap = false; for (int j = 1; j < n - i + 1; ++j) { if (nums[j] < nums[j-1]) { std::swap(nums[j], nums[j-1]); is_swap = true; } } if (!is_swap) break; } } int main() { std::vector<int> nums = {34,66,2,5,95,4,46,27}; BubbleSort(nums); for (int num : nums) { std::cout << num << " "; } // Output: 2 4 5 27 34 46 66 95 return 0; }
C# 语言 实现冒泡排序
namespace 冒泡排序 { class Program { // 从小到大排序 void BubbleSort( int [] nums) { for (int i = 0; i < nums.Length; i++) { bool swapped; // 小于nums.Lenght-1-i 是因为 从左向右比较,右边会留下排好的,排好的不用再进行比较了。 for (int j = 0; j < nums.Length - 1 - i; j++) { swapped = false; //放里面 每次都初试为false, 可能循环过程中成为了true,改回来 if (nums[j] > nums[j + 1]) { //C++直接用swap函数就行了,c#要自己写 int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; //交换了就记一下 swapped = true; } if (!swapped) //如果没有发生交换,那么就是排好了,提前退出 { break; } } } } static void Main(string[] args) { Program program = new Program(); //int[] nums = { 5, 4, 7, 2, 3 }; int[] nums = new int[5] { 6, 3, 7, 4 ,9}; program.BubbleSort(nums); //Console.WriteLine(nums); //笨蛋C# 这个函数不会输出数组里的元素,而是输出数组的类型 Console.WriteLine(string.Join(", ", nums)); //输出数组中的元素 要不就用for,foreach循环输出元素 Console.ReadKey(); } } }