1.如果有 N 个数字,称从左到右找最大为一趟,那么要排好序需要多少趟?
答:需要N-1次,因为如果因为N-1个数都排好了,那么最后一个数也就不用排了
2.那这个算法的时间复杂度为多少?
每排完一趟之后,就少排1个数字,所以为:
根据复杂度的规则,去掉低阶项(也就是n/2),并去掉常数系数,那复杂度就是O(n^2)
3.冒泡算法稳定吗(稳定性怎么样)?
所谓稳定性,其实就是说,当你原来待排的元素中间有相同的元素,在没有排序之前它们之间有先后顺序,在排完后它们之间的先后顺序不变,我们就称这个算法是稳定的(即本身待排元素中有大小一样的元素,现在怎么摆放的,那他排序完之后还是怎么摆放的)
#include<iostream> using namespace std; int temp=0; int n; int BubbleSort(int arr[]) { for(int i=0;i<n-1;i++)//控制趟数 { for(int j=0;j<=n-1-i;j++)//控制比较次数,第i+1趟时需要比较多少次。 { if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(int i=0;i<n;i++) { cout<<arr[i]<<" "; } } int main(){ cout<<"请输入你要排序的个数"<<endl; cin>>n; int arr[n]; cout<<"请输入你要排序的内容:"<<endl; for(int i=0;i<n;i++){ cin>>arr[i]; } BubbleSort(arr); return 0; }
#法1: def BubbleSort(arr): n = len(arr) # 遍历所有数组元素 for i in range(n): # Last i elements are already in place for j in range(0, n-i-1): if arr[j] > arr[j+1] : arr[j], arr[j+1] = arr[j+1], arr[j] def main(): ar=input("请输入排序内容:") ar=ar.split() arr=list(map(int,ar)) BubbleSort(arr) print ("排序后的数组:") for i in range(len(arr)): print ("%d" %arr[i],end=‘ ‘), main() #法2:使用sort或sorted() ar=input("请输入排序内容:") ar=ar.split() arr=list(map(int,ar)) #print(sorted(arr)) arr.sort() print(arr)
原文:https://www.cnblogs.com/zhaoxiansheng666/p/12828143.html