时间复杂度O(n),冒泡排序是一个稳定排序
算法思想:
对每一个元素进行遍历,并与这个元素的下一个元素作比较,如果顺序错误,则交换,知道数组中所有元素都至少被遍历过一次。
for(int i=n-1;i>=0;--i){
for(int j=0;j<i;++j){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
我们将要排序的数组分为已排序部分和未排序部分,每一次外层循环,都会将一个未排序部分的最值放入已排序部分,这样外层i--,这样最后就会得到一个有序数组
优化方案:
如果有一次过程没有发生交换元素的行为,则说明数组已经排好序,则结束循环,能降低循环的次数
力扣例题
其实就是将元素排序,去掉第一个和最后一个,斌且中间的数不能和这两个数相同
class Solution {
void bubblesort(vector<int>& a){
int n=a.size();
for(int i=n-1;i>=0;--i){
for(int j=0;j<i;++j){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
public:
int countElements(vector<int>& nums) {
bubblesort(nums);
int cnt=0;
for(int i=1;i<nums.size()-1;++i){
if(nums[i]!=nums[0] && nums[i]!=nums[nums.size()-1])
cnt++;
}
return cnt;
}
};