重复地走访要排序的数列,每次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名冒泡排序。
CPP:
#include <iostream>
#include <vector>
using namespace std;
void change(vector<int> &nums, int i, int j)
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
void bubble(vector<int> &nums)
{
for (int i = 0; i < nums.size(); i++)
{
cout << "Sort " << i << " :" << endl;
for (int j = 0; j < (nums.size() - 1); j++)
{
if (nums[j] > nums[j + 1])
{
change(nums, j, j + 1);
}
}
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i] << " ";
}
cout << endl;
}
}
int main()
{
vector<int> nums = {0, 9, 2, 44, 56, 62, 56, 35, 23, 45};
cout << "The nums:" << endl;
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i] << " ";
}
cout << endl;
bubble(nums);
cout << "After sorting:" << endl;
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i] << " ";
}
system("pause");
return 0;
}
python:
import numpy
def bubbleSort(nums):
l = len(nums) - 1
while l > 0:
for i in range(l):
if nums[i] > nums[i + 1]:
nums[i], nums[i + 1] = nums[i + 1], nums[i]
l -= 1
return nums
if __name__ == "__main__":
nums = numpy.random.randint(0, 10, 10)
print("nums:")
print(nums)
print("after sorting:")
print(bubbleSort(nums))