初步了解冒泡排序
冒泡排序是一种基础的排序算法,
该算法的核心思想是:比较相邻两个数的大小,并将较大的数移动到一边。
冒泡排序的特性:
1)就地性:冒泡排序不需要使用额外的数组空间。
2)稳定性:冒泡排序不会改变两个相同大小的元素之间的位置。
3)自适应性:冒泡排序的时间复杂度受到元素分布位置的影响。(优化冒泡排序的最佳时间复杂度是O(N),平均时间复杂度O(N^2))
冒泡排序算法:
void bubbleSort(int[] nums) {
int n = nums.length;
for(int i=0;i<n-1;i++){
//外循环
for(int j =0;j<n-i-1;j++){
//内循环
//比较大小,交换
if(nums[j]>nums[j+1]){
int tmp = nums[j];
nums[j]=nums[j+1];
nums[j+1] = tmp;
}
}
}
}
平均时间复杂度:O(N^2)
空间复杂度:O(1)
优化冒泡排序算法:
添加一个flag,若某一轮内循环未进行任何操作,说明排序已经完成,直接返回结果
void bubbleSort(int[] nums) {
int n = nums.length;
for(int i=0;i<n-1;i++){
//添加一个flag记录排序情况
boolean flag = false;
//外循环
for(int j =0;j<n-i-1;j++){
//内循环
//比较大小,交换
if(nums[j]>nums[j+1]){
int tmp = nums[j];
nums[j]=nums[j+1];
nums[j+1] = tmp;
flag = true;
}
}
if(!flag) break;//如果内循环未进行交换元素,跳出循环
}
}
最佳时间复杂度是O(N)
平均时间复杂度和最差时间复杂度:O(N^2)
|