You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pgts2hu9l bbf377ec95
Update README.md
4 years ago
README.md Update README.md 4 years ago

README.md

sort

//1希尔排序 //时间复杂度平均O(N^1.3) //空间复杂度O(1) void ShellSort(int* arr, int n) { int gap = n; while (gap>1) { //每次对gap折半操作 gap = gap / 2; //单趟排序 for (int i = 0; i < n - gap; ++i) { int end = i; int tem = arr[end + gap]; while (end >= 0) { if (tem < arr[end]) { arr[end + gap] = arr[end]; end -= gap; } else { break; } } arr[end + gap] = tem; } } }

//2选择排序 //空间复杂度O(1) //时间复杂度最坏情况O(N^2) 最好情况O(N^2) void swap(int* a, int* b) { int tem = *a; *a = *b; b = tem; } void SelectSort(int arr, int n) { //保存参与单趟排序的第一个数和最后一个数的下标 int begin = 0, end = n - 1; while (begin < end) { //保存最大值的下标 int maxi = begin; //保存最小值的下标 int mini = begin; //找出最大值和最小值的下标 for (int i = begin; i <= end; ++i) { if (arr[i] < arr[mini]) { mini = i; } if (arr[i] > arr[maxi]) { maxi = i; } } //最小值放在序列开头 swap(&arr[mini], &arr[begin]); //防止最大的数在begin位置被换走 if (begin == maxi) { maxi = mini; } //最大值放在序列结尾 swap(&arr[maxi], &arr[end]); ++begin; --end; } }

// 3鸡尾酒排序 //时间复杂度: 1顺序排列时鸡尾酒排序时间复杂度为O(n) 2逆序排序时鸡尾酒排序时间复杂度为O(n^2) 3当原始序列杂乱无序时平均时间复杂度为O(n^2)。 //空间复杂度: 鸡尾酒排序排序过程中Swap函数需要一个临时变量temp进行两两交换所需要的额外空间为1因此空间复杂度为O(1)。 ————————————————

void swap(int& a, int& b) { int tmp = a; a = b; b = tmp; }

void CockTailSort(vector &vi) { int isSorted=false; //双向同时进行 for(int i=0;i<vi.size()/2;i++) { isSorted=false; //升序排列 for(int j=i;j<vi.size()-i-1;j++) { if(vi[j]>vi[j+1]) { swap(vi[j], vi[j + 1]); isSorted=true; } }

    //降序排列
    for(int j=vi.size()-i-1;j>i;j--)
    {
        if(vi[j] < vi[j-1])
        {
            swap(vi[j], vi[j - 1]);
            isSorted=true;
        }
    }
    //中间排序结果输出,方便查看排序过程
    for (auto x : vi)
        cout << x << " ";
    cout << endl;

    if(isSorted==false)
    {
        break;
    }
}

}