我正在尝试为以下结构编写快速排序算法,我想按字母顺序对数组进行排序。
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不会被排序,而且某些元素也不合适。