C++の4つの古典的なソート

1538 ワード

1、泡立ちソート/[3,1,4,2,5]小さい時から大きい時まで複雑度:O(n^2)空間複雑度:O(1)安定
void bubbleSort(vector& nums)
{
    for(int i=0; inums[j+1])
            {
                num[j] = nums[j] + nums[j+1];
                nums[j+1] = nums[j] -nums[j+1];
                nums[j] = nums[j] -nums[j+1];
            }
        }
    }
}

2、選択ソート/[3,1,4,2,5]小さい時から大きい時まで複雑度:O(n^2)空間複雑度:O(1)不安定
void selectSort(vector& nums)
{
    for(int i=0; i nums[index])
                index = j;
        }
        nums[index] = nums[index] + nums[nums.size()-i-1];
        nums[nums.size()-i-1] = nums[index] - nums[nums.size()-i-1];
        nums[index] = nums[index] - nums[nums.size()-i-1];
    }
}

3、挿入ソート/[3,1,4,2,5]小さい時から大きい時まで複雑度:O(n^2)空間複雑度:O(1)安定
void insertSort(vector& nums)
{
    for(int i=1; i0; --j)
        {
            if(current

4、高速ソート/[3,1,4,2,5]小さい時から大きい時まで複雑度:O(nlogn)空間複雑度:O(nlogn)不安定度
void quickSort(vector& nums, int left, int right)
{
    if(left >= right)
        return;
    int i=left;
    int j=right;
    int base=nums[left];
    while(i= base)
            j--;
        while(i