排序算法01-冒泡排序(用C++、C#、lua实现)
时间:2019-11-08
本文章向大家介绍排序算法01-冒泡排序(用C++、C#、lua实现),主要包括排序算法01-冒泡排序(用C++、C#、lua实现)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文为排序算法-冒泡排序的代码实现。
作者水平比较差,有错误的地方请见谅。
1、冒泡排序
冒泡排序属于交换排序。
排序最好情况:为正序,需进行 1 趟排序,进行 n-1 次比较和0次移动数据。
排序最坏情况:为逆序,需进行 n-1 趟排序,进行 n^2/2 次比较和 n^2/2*3 次移动数据(每次交换都需要移动3次记录)。
平均比较次数:n^2/4
平均移动次数:n^2/4*3
平均时间复杂度:O(n^2)
平局空间复杂度:O(1)。因为只在交换位置时使用一个辅助空间做暂存记录。
2、C#实现
冒泡排序
BubbleSort.cs
public static class BubbleSort
{
public static void Bubble(int[] numbers)
{
if (numbers == null || numbers.Length < 2)
{
Console.WriteLine("参数数组有误");
return;
}
for (int i = 0; i < numbers.Length; i++)
{
for (int j = i + 1; j < numbers.Length; j++)
{
if (numbers[i] > numbers[j])
{
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
int[] numbers = { 555, 3, -5, 20, 11 };
BubbleSort.Bubble(numbers);
for(int i = 0; i < numbers.Length; i++)
{
Console.Write(numbers[i] + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
3、C++实现
BubbleSort.cpp
///冒泡排序
class BubbleSort
{
public:
static void Bubble(int numbers[],int length);
};
void BubbleSort::Bubble(int numbers[],int length)
{
if (numbers == NULL || length < 2)
{
cout<<"参数数组有误"<<endl;
return;
}
for (int i = 0; i < length; i++)
{
for (int j = i + 1; j < length; j++)
{
if (numbers[i] > numbers[j])
{
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
}
main.cpp
int main()
{
int numbers[] = {555, 3, -5, 20, 11};
int length = sizeof(numbers)/sizeof(numbers[0]);
BubbleSort::Bubble(numbers,length);
for(int i=0;i<length;i++){
cout<<numbers[i]<<" ";
}
cout<<endl;
return 0;
}
4、lua实现
numbers = {555, 3, -5, 20, 11}
function BubbleSort(nums)
local length = #nums
if (nums == nil or length < 2) then
print("参数数组有误")
return
end
for i=1,length,1 do
for j=i+1,length,1 do
if (nums[i] > nums[j]) then
local temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
end
end
end
end
BubbleSort(numbers)
for i=1,#numbers,1 do
io.write(numbers[i] .. ' ')
end
print()
--#nums 获取数组长度
5、新知识和疑问
5.1 C++
int numbers[] = {555, 3, -5, 20, 11};
//使用这种方法来获取数组长度
//用数组总字节数/数组单个元素字节数
int length = sizeof(numbers)/sizeof(numbers[0]);
C++返回值无法是这种 int[] 类型的数组,要想返回数组需使用指针, int* 。
C++实现静态函数。
5.2 lua #号使用
在使用#获取数组长度时要注意必须为连续的数组。
在中间存在空洞(nil)的数组,使用#是不可靠的!!!
原文地址:https://www.cnblogs.com/Fflyqaq/p/11818304.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL 案例:“丢失数据”的谜题
- 接口测试框架实战(三) | APIObject 模式、原则与应用
- 接口测试框架实战(四) | 通用 API 封装实战
- 面试字节两轮后被完虐,一份字节跳动面试官给你的Android技术面试指南,请查收!
- 3分钟短文:说说Laravel模型中还算常用的2个“关系”
- iOS音视频接入 - TRTC实时屏幕分享
- 如何维护爬虫代理
- LoRaWAN 帧计数机制及典型问题分析
- ffmpeg mp4解码管道输出的问题
- 机器人运动控制仿真:Matlab机器人工具箱和Simmechanics
- 使用HTMLTestRunner实现HTML测试报告
- Jmeter五步实现性能测试
- 测试工程师必须要掌握的linux命令
- Python之pip使用详解|附第三方库安装总结
- Python基础之数据类型详解