冒泡排序(C++ & python)

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)

  

猜你喜欢

转载自www.cnblogs.com/zhaoxiansheng666/p/12828143.html