zoukankan      html  css  js  c++  java
  • 冒泡排序学习

    伪代码:

    int put list[1->n];
    
    for i <- n to 1
    
      for j = 0 to i-1
    
           if list[j]>list[j+1]
    
                swap(list[j],list[j+1])
    

    C++实现:

    #include<iostream>
    //交换数据
    inline void my_swap(int &a, int &b)
    {
       int temp = a;
       a = b;
       b =temp;
    }
    //冒泡排序
    void bubble_sort(int *arr,int n)
    {
        for (int i = n-1; i >= 0; --i)
           for (int j = 0; j <=  i-1; ++j)
           {
    		   if (arr[j] > arr[j+1])
    		     my_swap(arr[j],arr[j+1]);
           }
    }
    //打印数组
    void dis_arr(int *a, int n)
    {
    	std::cout << "The array is: ";
       for (int i = 0; i< n;++i)
       {
    	   std::cout << a[i] << " ";
       }
       std::cout << std::endl;
    }
    int main()
    {
    	int arr[] = {1,-1,90,20,8,-80};
        int n = sizeof(arr)/sizeof(*arr);
    	dis_arr(arr,n);
    	bubble_sort(arr,n);
    	dis_arr(arr,n);
    }
    

    根据同学说的,上面说的冒泡排序要进行n*n-1次,有可能排序已经完成,但仍在进行循环,因此可以设置标志位,如果已经完成排序,就退出:

    改进算法为:

    #include<iostream>
    //交换数据
    inline void my_swap(int &a, int &b)
    {
    	int temp = a;
    	a = b;
    	b =temp;
    }
    //打印数组
    void dis_arr(int *a, int n)
    {
    	std::cout << "The array is: ";
    	for (int i = 0; i< n;++i)
    	{
    		std::cout << a[i] << " ";
    	}
    	std::cout << std::endl;
    }
    //冒泡排序
    void bubble_sort(int *arr,int n)
    {
        bool flag = 1;
    	for (int i = n-1; i >= 0; --i)
    	{
    			//每次前i-1个数的最大值冒泡到最后
    		flag = 1;
    		for (int j = 0; j <=  i-1; ++j)
    		{
    			if (arr[j] > arr[j+1])
    			{
    				my_swap(arr[j],arr[j+1]);
    				flag = 0;
    			}
    		}
    		if(flag)
    		  return;
    		std::cout << "第"<< n-i << "次排序:";
    		dis_arr(arr, n);
    	}
    }
    
    int main()
    {
    	int arr[] = {36,18,52,39,27,32,12,91,8};
    	int n = sizeof(arr)/sizeof(*arr);
    	dis_arr(arr,n);
    	bubble_sort(arr,n);
    	dis_arr(arr,n);
    }
    
  • 相关阅读:
    hdu 1104 数论+bfs
    hdu 1019 最小公倍数
    hdu 1005 数论 循环
    山东省第三届acm
    hdu 1576
    浏览器支持
    FormData
    获取APP图片资源
    链接转标签
    bug20170125
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2138484.html
Copyright © 2011-2022 走看看