Quicksort使用字符串,中位元素策略

时间:2017-03-28 07:54:16

标签: c

我正在尝试为以下结构编写快速排序算法,我想按字母顺序对数组进行排序。

    typedef struct
{
  char *str; //string

} v_elemento;

/**
* this register has the array, a counter for the size and capacity.
*/
typedef struct
{
  /** size of vector */
  int tamanho;   

  /** capacity of the vetor */
  int capacidade;     

  /** array  */
  v_elemento* elementos;  
} vetor;

为了选择枢轴我正在使用三元素中位数策略。但是,它无法正常工作......这是我的代码。

    void quick_sort(vetor* vec,int left,int right)
{
    int pivot,j,i,escolha_pivo;
    char* temp;

            if(left>=right)
            return;

            i=left;
            j=right;
            escolha_pivo=(left+right)/2; //middle element

            // pivot is the median of the three elements
            if(strcmp(vec->elementos[left].str,vec->elementos[right].str)<0){
                if(strcmp(vec->elementos[escolha_pivo].str,vec->elementos[right].str)>=0){
                    temp=vec->elementos[escolha_pivo].str;
                    vec->elementos[escolha_pivo].str=vec->elementos[right].str;
                    vec->elementos[right].str=temp;

                }
                else if(strcmp(vec->elementos[left].str,vec->elementos[escolha_pivo].str)>0){
                    temp=vec->elementos[escolha_pivo].str;
                    vec->elementos[escolha_pivo].str=vec->elementos[left].str;
                    vec->elementos[left].str=temp;
                }
            }
                 if(strcmp(vec->elementos[left].str,vec->elementos[right].str)>=0){
                    if(strcmp(vec->elementos[right].str,vec->elementos[escolha_pivo].str)>=0){

                        temp=vec->elementos[escolha_pivo].str;
                        vec->elementos[escolha_pivo].str=vec->elementos[right].str;
                        vec->elementos[right].str=temp;
                    }

            }
                pivot=escolha_pivo;
        }

//quicksort algorithm
            while(i<j){
                while(strcmp(vec->elementos[i].str,vec->elementos[pivot].str)<=0 && (i<right)){
                    i++;
                }
                while(strcmp(vec->elementos[j].str,vec->elementos[pivot].str)>0){
                    j--;
                }
                if(i<j){
                    temp=vec->elementos[i].str;
                    vec->elementos[i].str=vec->elementos[j].str;
                    vec->elementos[j].str=temp;
                }
            }
                temp=vec->elementos[pivot].str;
                vec->elementos[pivot].str=vec->elementos[j].str;
                vec->elementos[j].str=temp;
                quick_sort(vec,left,j-1);
                quick_sort(vec,j+1,right);

}

如果我强迫我的数据库成为左侧或右侧元素,代码运行良好但我们都知道这不是最有效的方式,所以我认为我的快速排序算法是正确的。

样品:

原始阵列(它很大,只会放几个元素):

Quercus rubra L.
Dicksonia antarctica
Prunus laurocerasus (L.)
Pinus bungeana Zuccarini
Abies koreana Wilson
Pieris japonica (Thunb.) D. Don.
Quercus coccifera L.
Calocedrus decurrens ((Torrey) Florin)
Podocarpus macrophyllus (Thunberg)
Dasylirion acrotrichum ((Schiede) Zucc.)
Picea orientalis (L.) Link.
Cedrus libani (A. Richard)
Crataegus monogyna Jacq.
Calliandra tweedii (Benth.)
Thujopsis dolobrata (Siebold & Zucc.)
Abies amabilis Dougl. Ex J. Forbes
Quercus robur L.
Laburnum anagyroides (Medic.)
Portulacaria afra (Jacq)
Cryptomeria japonica (L. filius) D. Don
Carpinus betulus
Juniperus chinensis (L.)
Pieris japonica (Thunb.) D. Don.
Pyracantha coccinea M. J. Roem.
Cordyline australis (G.Forst.) Endl.
Deutzia crenata
Vaccinium corymbosum L.
Acacia retinodes Schlecht.
Bischofia javanica Blume
Deutzia crenata
Casuarina cristata (Miquel)
Laurus nobilis L.
Spiraea cantoniensis Lour
Abies amabilis Dougl. Ex J. Forbes
Quercus suber L.
Dasylirion acrotrichum ((Schiede) Zucc.)
Viburnum opulus L.
Aesculus californica (Spach) Nutt.
Picea omorika (Pancic) Purkyne
Spiraea japonica L. f.
Abelia x grandiflora (Andre) Rehder
Abies cephalonica Loudon
Picea pungens Engelmann
Picea sitchensis (Bongard) Carrere.
Populus x canadensis (Moench)
Camellia japonica (L.)
Abies nordmannQuercus rubra L.
Dicksonia antarctica
Prunus laurocerasus (L.)
Pinus bungeana Zuccarini
Abies koreana Wilson
Pieris japonica (Thunb.) D. Don.
Quercus coccifera L.
Calocedrus decurrens ((Torrey) Florin)
Podocarpus macrophyllus (Thunberg)
Dasylirion acrotrichum ((Schiede) Zucc.)
Picea orientalis (L.) Link.
Cedrus libani (A. Richard)
Crataegus monogyna Jacq.
Calliandra tweedii (Benth.)
Thujopsis dolobrata (Siebold & Zucc.)
Abies amabilis Dougl. Ex J. Forbes
Quercus robur L.
Laburnum anagyroides (Medic.)
Portulacaria afra (Jacq)
Cryptomeria japonica (L. filius) D. Don
Carpinus betulus
Juniperus chinensis (L.)
Pieris japonica (Thunb.) D. Don.
Pyracantha coccinea M. J. Roem.
Cordyline australis (G.Forst.) Endl.
Deutzia crenata
Vaccinium corymbosum L.
Acacia retinodes Schlecht.
Bischofia javanica Blume
Deutzia crenata
Casuarina cristata (Miquel)
Laurus nobilis L.
Spiraea cantoniensis Lour
Abies amabilis Dougl. Ex J. Forbes
Quercus suber L.
Dasylirion acrotrichum ((Schiede) Zucc.)
Viburnum opulus L.
Aesculus californica (Spach) Nutt.
Picea omorika (Pancic) Purkyne
Spiraea japonica L. f.
Abelia x grandiflora (Andre) Rehder
Abies cephalonica Loudon
Picea pungens Engelmann
Picea sitchensis (Bongard) Carrere.
Populus x canadensis (Moench)
Camellia japonica (L.)
Abies nordmanniana (Steven) Spach 1841.
Aloe vera (L.) Burm.F.
Picea omorika (Pancic) Purkyne
Cordyline australis (G.Forst.) Endl.
Cupressus lusitanica Miller
Araucaria angustifolia (Bertol.) Kuntze
Abies fraseri (Pursh) Poiret
Acacia retinodes Schlecht.
Cotoneaster salicifolius Franch.
Abelia x grandiflora (Andre) Rehder
Acer rubrum L.
Quercus robur L.
Deutzia crenata
Cercidiphyllum japonicum (Siebold & Zucc.)
Cercis siliquastrum L.
Jasminum officinalle (L.)
Ostrya carpinifolia Scop.
Pyracantha coccinea M. J. Roem.
Populus alba (L.)
Callistemon linearis (DC.)
Casuarina cristata (Miquel)
Spiraea cantoniensis Lour
Ginkgo biloba (L.)
Chaenomeles japonica (Thunb.) Lindl. Ex Spach
Tilia tomentosa Moench
Quercus suber L.
Chlorophytum comosum (Thunberg) Jacques
Pieris japonica (Thunb.) D. Don.
Cercidiphyllum japonicum (Siebold & Zucc.)
Picea omorika (Pancic) Purkyne
Cupressus lusitanica Miller
Thuja plicata (D. Don)
Quercus coccifera L.
Acer palmatum Thunb.
Paulownia tomentosa (Thunb.) Steudel
Cupressus arizonica Greene
Pinus bungeana Zuccarini
Cercidiphyllum japonicum (Siebold & Zucc.)
Cupressus arizonica Greene
Mahonia aquifolium (L.)
Thuja plicata (D. Don)
Pinus contorta Douglas
Colletia spinosissima J. F. Gmel.
Paulownia tomentosa (Thunb.) Steudel

使用左和中位数作为支点:

    Abelia x grandiflora (Andre) Rehder
    Abelia x grandiflora (Andre) Rehder
    Abelia x grandiflora (Andre) Rehder
    Abelia x grandiflora (Andre) Rehder
    Abelia x grandiflora (Andre) Rehder
    Abelia x grandiflora (Andre) Rehder
    Abies amabilis Dougl. Ex J. Forbes
    Abies amabilis Dougl. Ex J. Forbes
    Abies amabilis Dougl. Ex J. Forbes
    Abies cephalonica Loudon
    Abies cephalonica Loudon
    Abies cephalonica Loudon
    Abies cilicica (Ant. & kotchy) Carriere
    Abies fraseri (Pursh) Poiret
    Abies fraseri (Pursh) Poiret
    Abies koreana Wilson
    Abies koreana Wilson
    Abies nordmanniana (Steven) Spach 1841.
    Abies nordmanniana (Steven) Spach 1841.
    Abies pinsapo Boisser
    Acacia nilotica (L.) Willd. ex Delile
    Acacia nilotica (L.) Willd. ex Delile
    Acacia retinodes Schlecht.
    Acacia retinodes Schlecht.
    Acacia retinodes Schlecht.
    Acacia retinodes Schlecht.
    Acacia verticillata (L'Her.) Willd.
    Acer buergerianum Miq.
    Acer japonicum Thunb.
    Acer negundo L.
    Acer palmatum Thunb.
    Acer palmatum Thunb.
    Acer pseudoplatanus L.
    Acer rubrum L.
    Aesculus californica (Spach) Nutt.
    Aesculus californica (Spach) Nutt.
    Aesculus californica (Spach) Nutt.
    Aesculus californica (Spach) Nutt.
    Agave americana (L.)
    Agave americana (L.)
    Aloe vera (L.) Burm.F.
    Aloe vera (L.) Burm.F.
    Aloe vera (L.) Burm.F.
    Araucaria angustifolia (Bertol.) Kuntze
    Araucaria angustifolia (Bertol.) Kuntze
    Arbutus xalapensis Kunth
    Arbutus xalapensis Kunth
    Bischofia javanica Blume
    Bischofia javanica Blume
    Bischofia javanica Blume
    Brugmansia sanguinea (Ruiz e Pav.) D. Don
    Brugmansia sanguinea (Ruiz e Pav.) D. Don
    Caesalpina spinosa (mol.) Kuntze
    Caesalpina spinosa (mol.) Kuntze
    Caesalpina spinosa (mol.) Kuntze
    Caesalpinia echinata (Lam.)
    Calliandra tweedii (Benth.)
    Calliandra tweedii (Benth.)
    Callistemon linearis (DC.)
    Callistemon linearis (DC.)
    Callistemon linearis (DC.)
    Callistemon linearis (DC.)
    Calocedrus decurrens ((Torrey) Florin)
    Calycanthus floridus (L.)
    Camellia japonica (L.)
    Carissa bispinosa ((L.) Desf. Ex Brenan)
    Carpinus betulus
    Carpinus betulus
    Carpinus betulus
    Carpinus japonica (Blume)
    Carpinus japonica (Blume)
    Castanea sativa (Mill.)
    Castanea sativa (Mill.)
    Casuarina cristata (Miquel)
    Casuarina cristata (Miquel)
    Casuarina cunnringhamiana (Miquel)
    Casuarina cunnringhamiana (Miquel)
    Casuarina cunnringhamiana (Miquel)
    Catalpa x erubescens
    Catalpa x erubescens
    Cedrus Atlantica ((Endlicher) Carriere)
    Cedrus libani (A. Richard)
    Cedrus libani (A. Richard)
    Cedrus libani (A. Richard)
    Celtis occidentalis (L.)
    Celtis occidentalis (L.)
    Celtis occidentalis (L.)
    Cephalotaxus harringtonia ((Forbes) Kock)
    Ceratonia siliqua (L.)
    Ceratonia siliqua (L.)
    Cercidiphyllum japonicum (Siebold & Zucc.)
    Cercidiphyllum japonicum (Siebold & Zucc.)
    Cercidiphyllum japonicum (Siebold & Zucc.)
    Cercis chinensis (Bunge)
    Cercis siliquastrum L.
    Cercis siliquastrum L.
    Cercis siliquastrum L.
    Cercis siliquastrum L.
    Chaenomeles japonica (Thunb.) Lindl. Ex Spach
    Chaenomeles japonica (Thunb.) Lindl. Ex Spach
    Chaenomeles japonica (Thunb.) Lindl. Ex Spach
    Chamaecyparis lawsoniana (A. Murray) Parlatore
    Chamaerops humilis (L.)
    Chlorophytum comosum (Thunberg) Jacques
    Chlorophytum comosum (Thunberg) Jacques
    Chlorophytum comosum (Thunberg) Jacques
    Cinnamomum camphora (L.) Siebold
    Cinnamomum camphora (L.) Siebold
    Colletia spinosissima J. F. Gmel.
    Colletia spinosissima J. F. Gmel.
    Cordyline australis (G.Forst.) Endl.
    Cordyline australis (G.Forst.) Endl.
    Cordyline australis (G.Forst.) Endl.
    Cornus capitata Wall. ex Roxb.
    Cortaderia selloana (Schult. & Schult. F.) Asch. & Graebn.
    Corylus avellana L.
    Cotoneaster salicifolius Franch.
    Cotoneaster salicifolius Franch.
    Crataegus monogyna Jacq.
    Crataegus monogyna Jacq.
    Cryptomeria japonica (L. filius) D. Don
    Cryptomeria japonica (L. filius) D. Don
    Cunninghamia lanceolata (Lamb.) Hook. f.
    Cunninghamia lanceolata (Lamb.) Hook. f.
    Cunninghamia lanceolata (Lamb.) Hook. f.
    Cupressus arizonica Greene
    Cupressus arizonica Greene
    Cupressus arizonica Greene
    Cupressus arizonica Greene
    Cupressus lusitanica Miller
    Cupressus lusitanica Miller
    Cupressus lusitanica Miller
    Cupressus lusitanica Miller
    Cupressus lusitanica Miller
    Dasylirion acrotrichum ((Schiede) Zucc.)
    Dasylirion acrotrichum ((Schiede) Zucc.)
    Dasylirion acrotrichum ((Schiede) Zucc.)
    Dasylirion acrotrichum ((Schiede) Zucc.)
    Deutzia crenata
    Deutzia crenata
    Deutzia crenata
    Deutzia crenata
    Deutzia crenata
    Dicksonia antarctica
    Diospyros kaki L.f.
    Erythrina lysistemon Thunb.
    Ginkgo biloba (L.)
    Ginkgo biloba (L.)
    Gleditsia triacanthos (L.)
    Jasminum officinalle (L.)
    Jasminum officinalle (L.)
    Jasminum officinalle (L.)
    Juglans regia (L.)
    Juglans regia (L.)
    Juniperus chinensis (L.)
    Juniperus chinensis (L.)
    Kalmia latifolia
    Laburnum anagyroides (Medic.
    Laburnum anagyroides (Medic.)
    Lagerstroemia indica (L.)
    Lagerstroemia indica (L.)
    Lantana camara (L.)
    Lantana camara (L.)
    Lantana camara (L.)
    Lantana camara (L.)
    Larix kaempferi (Lambert) Carriere
    Laurus nobilis L.
    Leucothoe fontanesiana (Steudel) Sleumer
    Leucothoe racemosa (L.) Gray
    Ligustrum lucidum Aiton fil.
    Ligustrum lucidum Aiton fil.
    Liquidambar styraciflua L.
    Liquidambar styraciflua L.
    Mahonia aquifolium (L.)
    Mahonia aquifolium (L.)
    Mahonia aquifolium (L.)
    Melia azedarach L.
    Melia azedarach L.
    Melia azedarach L.
    Melia azedarach L.
    Opuntia humifusa (Rafin.)
    Ostrya carpinifolia Scop.
    Ostrya carpinifolia Scop.
    Paulownia tomentosa (Thunb.) Steudel
    Paulownia tomentosa (Thunb.) Steudel
    Paulownia tomentosa (Thunb.) Steudel
    Paulownia tomentosa (Thunb.) Steudel
    Pavonia spinifex (L.) Cavanilles
    Pavonia spinifex (L.) Cavanilles
    Pavonia spinifex (L.) Cavanilles
    Picea omorika (Pancic) Purkyne
    Picea omorika (Pancic) Purkyne
    Picea omorika (Pancic) Purkyne
    Picea omorika (Pancic) Purkyne
    Picea omorika (Pancic) Purkyne
    Picea omorika (Pancic) Purkyne
    Picea omorika (Pancic) Purkyne
    Picea omorika (Pancic) Purkyne

Using the median as a pivot:

Abelia x grandiflora (Andre) Rehder
Abelia x grandiflora (Andre) Rehder
Abelia x grandiflora (Andre) Rehder
Abelia x grandiflora (Andre) Rehder
Abelia x grandiflora (Andre) Rehder
Abelia x grandiflora (Andre) Rehder
Abies amabilis Dougl. Ex J. Forbes
Abies amabilis Dougl. Ex J. Forbes
Abies amabilis Dougl. Ex J. Forbes
Abies cephalonica Loudon
Abies cilicica (Ant. & kotchy) Carriere
Abies fraseri (Pursh) Poiret
Acacia nilotica (L.) Willd. ex Delile
Acacia retinodes Schlecht.
Acer japonicum Thunb.
Abies cephalonica Loudon
Abies cephalonica Loudon
Abies fraseri (Pursh) Poiret
Abies koreana Wilson
Abies koreana Wilson
Abies nordmanniana (Steven) Spach 1841.
Abies nordmanniana (Steven) Spach 1841.
Abies pinsapo Boisser
Acacia nilotica (L.) Willd. ex Delile
Acacia retinodes Schlecht.
Acacia retinodes Schlecht.
Acacia retinodes Schlecht.
Acacia verticillata (L'Her.) Willd.
Acer buergerianum Miq.
Acer negundo L.
Acer palmatum Thunb.
Acer palmatum Thunb.
Acer pseudoplatanus L.
Acer rubrum L.
Aesculus californica (Spach) Nutt.
Aesculus californica (Spach) Nutt.
Aesculus californica (Spach) Nutt.
Aesculus californica (Spach) Nutt.
Agave americana (L.)
Agave americana (L.)
Aloe vera (L.) Burm.F.
Aloe vera (L.) Burm.F.
Aloe vera (L.) Burm.F.
Araucaria angustifolia (Bertol.) Kuntze
Araucaria angustifolia (Bertol.) Kuntze
Callistemon linearis (DC.)
Camellia japonica (L.)
Carpinus japonica (Blume)
Catalpa x erubescens
Cercis siliquastrum L.
**Arbutus xalapensis Kunth**
**Arbutus xalapensis Kunth
Bischofia javanica Blume
Bischofia javanica Blume
Bischofia javanica Blume**
Caesalpinia echinata (Lam.)
Brugmansia sanguinea (Ruiz e Pav.) D. Don
Brugmansia sanguinea (Ruiz e Pav.) D. Don
Caesalpina spinosa (mol.) Kuntze
Caesalpina spinosa (mol.) Kuntze
Caesalpina spinosa (mol.) Kuntze
Calliandra tweedii (Benth.)
Calliandra tweedii (Benth.)
Callistemon linearis (DC.)
Callistemon linearis (DC.)
Callistemon linearis (DC.)
Calocedrus decurrens ((Torrey) Florin)
Calycanthus floridus (L.)
Carissa bispinosa ((L.) Desf. Ex Brenan)

当我使用中位数时,B不会被排序,而且某些元素也不合适。

0 个答案:

没有答案