C++中的sort()和qsort()和C中的二維數組傳參

一.目的

最近刷題總會遇到排序,因爲快排已經寫了很多了,就想省些時間用一下C++中的排序函數。
對於二維數組傳參,以前解決過好多次,但總會忘記,所以今天總結一下。

二.排序(頭文件: algorithm)
1.sort():對給定區間所有元素進行排序
該函數有兩個參數的形式和三個參數的形式。
例如:對於一個一維數組排序. int a[10];
兩個參數:

  sort(a, a+10);//兩個參數默認是升序排列

三個參數:

sort(a, a+10, compare);//compare是一個由你自己定義的比較函數在這個函數裏你可以它是升序還是降序。

compare函數的聲明:

int compare(int a, int b);
{
   return a>b;//這裏是降序, a<b是升序。
}

2.qsort()
函數原型:
void qsort(void base, size_t nelem, size_t width, int (*fcmp)(const void,const void *))
輸入參數:
Base:待排序的數組名
nelem:數組元數的個數(長度)
width:每一個元素所佔存儲空間的大小
fcmp:用於對數組元素進行比較的函數的指針(該函數是要自己寫的)

例子:
對一個一維數組進行排序: int a[10];

qsort(a, sizeof(a), sizeof(int), compare);

具體代碼

#include<iostream>
#include<stdlib.h>
using namespace std;
int com(const void *a,const void *b){
    return (*(int*)a-*(int*)b)<0;  //降序  >0升序
}
int main(){
    int a[10];
    int i;
    for(i=0;i<10;++i)
        cin>>a[i];
    qsort(a,10,sizeof(int),com);
    for(i=0;i<10;++i)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

三.二維數組傳參
有兩種方式:
例如:對一個二維數組排序 int a[10][5];
1.聲明:

  void sort(int a[][5]);//第二個括號內必須有列數

2.聲明:

void sort(int (*a)[5]);//指針數組
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章