关闭

排序--冒泡排序

176人阅读 评论(0) 收藏 举报
分类:

冒泡的时间复杂度是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;
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:358584次
    • 积分:8183
    • 等级:
    • 排名:第2572名
    • 原创:475篇
    • 转载:37篇
    • 译文:0篇
    • 评论:13条
    最新评论