快速排序算法实现(二维数组)

Posted 懒人的记录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法实现(二维数组)相关的知识,希望对你有一定的参考价值。

上一篇文章写了快速排序算法的实现,但是是基于一维数组的,为了提高一下自我,这次我们在二维数组上实现下快速排序,整体的排序思想是一样的,唯一不同的地方就是在交互数据的时候需要多做一步,需要将整行数据全部交换

代码实现

更新后的二维数组排序函数

//接收参数增加了一个行数
//通过数组指针指向二维数组
void quickSort(int (*a)[4], int p ,int row, int r) {


    if (p >= r){
        return;
    }

    int column = sizeof(a[0])/sizeof(a[0][0]);

    int i = p;
    int j = 0;
    int pivot = r; //分区点
    for ( j = p;  j <= r - 1; j++){

            if (a[j][0] < a[pivot][0]) {
                int t = a[i][0];
                a[i][0] = a[j][0];
                a[j][0] = t;

                //交换完i的值之后,还需要将这一行对应的数据同样也交换了
                for (int k = 1; k < column; k++) {
                    int t = a[i][k];
                    a[i][k] = a[j][k];
                    a[j][k] = t;
                }
                i++;

            }
    }

    int t = a[i][0];
    a[i][0] = a[r][0];
    a[r][0] = t;
    //交换完i的值之后,还需要将这一行对应的数据同样也交换了
    for (int k = 1; k < column; k++) {
        int t = a[i][k];
        a[i][k] = a[r][k];
        a[r][k] = t;
    }
    quickSort(a, p, row,i-1);
    quickSort(a, i+1,row, r);

}

main函数:

int main(){

    int b [][4] {{6,3,1,4}, {1,4,2,5}, {3,5,4,6}};
    int row = sizeof(b)/sizeof(b[0]);
    int column = sizeof(b[0])/sizeof(b[0][0]);
    int r = row - 1;
    cout << "排序之前二维数组:" << endl;
    for (int i = 0; i < row; i++){
        for (int j = 0; j< column; j++){
            cout << b[i][j] ;
        }
        cout << endl;
    }
    quickSort(b, 0, row, r);
    cout << "排序之后二维数组:" << endl;
    for (int i = 0; i < row; i++){
        for (int j = 0; j< column; j++){
            cout << b[i][j] ;
        }
        cout << endl;
    }
    return 0;
}


以上是关于快速排序算法实现(二维数组)的主要内容,如果未能解决你的问题,请参考以下文章

php怎么实现上下移动排序

快速排序/快速选择算法

二维数组快速排序(sort+qsort)

二维数组查询算法

C语言,快速排序算法

排序算法入门之快速排序(java实现)