通过Shaker排序对数组的主对角线进行排序

时间:2018-12-05 07:22:58

标签: c arrays

那是我的任务。我不知道如何在2D中实现它。

所有变量(i,j,L,R等都是整数)

<svg width="200" height="200">
    <path d="m10,10 h100 v100 h-100 v-100" stroke="black" fill="none" stroke-width="2"/>
</svg>

我尝试了这段代码,但是我认为这是有问题的。

输入:

    while (L < R)
{
    for(i, j = L; i < R; i++, j++)
    {
        if (a[i][j] > a[i + 1][j + 1])
        {
            temp = a[i][j];
            a[i][j] = a[i + 1][j + 1];
            a[i + 1][j + 1] = temp;
            k = i;
        }
    }
    R = k;
    for(i, j = R - 1; i >= L; i--, j--)
    {
        if(a[i][j] > a[i + 1][j + 1])
        {
            temp = a[i][j];
            a[i][j] = a[i + 1][j + 1];
            a[i + 1][j + 1] = temp;
            k = i;  
        }
    }
    L = k + 1;
}

输出:(应该是)

1 10 5
4 0 8
8 18 3

但是当前输出是

0 10 5
4 1 8
8 18 3

1 个答案:

答案 0 :(得分:1)

使用按引用调用交换值的函数。

    void swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

实现振动筛排序的功能

    void ShakerSort(int a[], int n)
{
    int i, j, k;
    for(i = 0; i < n;)
    {
        // First phase for ascending highest value to the highest unsorted index.
        for(j = i+1; j < n; j++)
        {
            if(a[j] < a[j-1])
                swap(&a[j], &a[j-1]);
        }
        // Decrementing highest index. 
        n--;

        // Second phase for descending lowest value to the lowest unsorted index.
        for(k = n-1; k > i; k--)
        {
            if(a[k] < a[k-1])
                swap(&a[k], &a[k-1]);
        }
        // Incrementing lowest index.
        i++;
    }
}

主要功能如下

    int main()
{
    int n, i;
    cout<<"\nEnter the number of data element to be sorted: ";
    cin>>n;

    int arr[n];
    for(i = 0; i < n; i++)
    {
        cout<<"Enter element "<<i+1<<": ";
        cin>>arr[i];
    }

    ShakerSort(arr, n);

    // Printing the sorted data.
    cout<<"\nSorted Data ";
    for (i = 0; i < n; i++)
        cout<<"->"<<arr[i];

    return 0;
}

以上代码以c++编写,请参考并根据您的要求进行更改