chengonghao的博客

Practice Makes Perfect

排序--冒泡排序

冒泡的时间复杂度是O(N^2)

C# 版

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BubbleSort_CSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = { 9, 1, 5, 8, 2, 7, 4, 6, 2 };
            BubbleSort_CSharp(arr);
            for(int i = 0; i < arr.Length; ++ i)
            {
                Console.Write(arr[i]);
            }
            Console.ReadLine();
        }

        static void BubbleSort_CSharp(int[] arr)
        {
            bool isSorted = true; // 为了避免无意义的循环
            for(int i = 0; i < arr.Length && isSorted; ++ i)
            {
                isSorted = false;
                for(int j = arr.Length - 2; j >= i; -- j)
                {
                    if(arr[j] > arr[j + 1])
                    {
                        int tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                        isSorted = true; // 如果有数据交换,说明[i, arr.length - 1]这段区间是乱序的,要继续执行第一个for循环
                    }
                }
            }
        }
    }
}

C 版

#include "stdafx.h"

void C_BubbleSort(int* arr, int length)
{
	bool isSorted = true; // 为了避免无意义的循环  
	for (int i = 0; i < length; ++i)
	{
		for (int j = length - 2; j >= i; --j)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j] ;
				arr[j] = arr[j + 1] ;
				arr[j + 1] = tmp;
				isSorted = true; // 如果有数据交换,说明[i, arr.length - 1]这段区间是乱序的,要继续执行第一个for循环 
			}
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	int arr[] = {9, 1, 5, 6, 3, 7, 4, 8, 2};
	int length = 9 ;
	C_BubbleSort(arr, length);
	
	for (int i = 0; i < length; ++i)
	{
		printf("%d,", arr[i]);
	}
	printf("\n");

	getchar();

	return 0;
}



C++ 版

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace::std;

void Cpp_BublleSort(vector<int>& vec)
{
	bool isSorted = true;
	for (int i = 0; i < vec.size() && isSorted; ++i)
	{
		isSorted = false; // 为了避免无意义的循环  
		for (int j = vec.size() - 2; j >= i; --j)
		{
			if (vec[j] > vec[j + 1])
			{
				int tmp = vec[j];
				vec[j] = vec[j + 1];
				vec[j + 1] = tmp;
				isSorted = true; // 如果有数据交换,说明[i, arr.length - 1]这段区间是乱序的,要继续执行第一个for循环  
			}
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	int arr[] = {9, 1, 5, 6, 3, 7, 4, 8, 2};

	vector<int> vec(arr, arr + 9);
	Cpp_BublleSort(vec);
	for (int i = 0 ; i < vec.size(); ++i)
	{
		cout << vec[i] << " ";
	}
	cout << endl;
	
	system("pause");
	return 0;
}



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengonghao/article/details/51557312
个人分类: 数据结构与算法
上一篇STL 简单 hashtable 的实现
下一篇扑克牌顺子
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭