Autor: GuangshengZhou
QQ: 825672792
Descripción del problema
Utilizado recientemente en un proyecto en una especie rápida, pero una vez que los datos duplicada aparece en la matriz, rápida especie en una gran oportunidad de entrar en los muertos por la mala, debido a que el proceso de selección se repite para una serie de grupos de elementos iguales de intercambio. Ahora las modificaciones algoritmo menores, adiciones iguales a condición de determinación, es decir, un tercio del corte.
función de codificación
Directamente después del código.
//交换函数
void swap(int & nFirst, int & nSecond){
nFirst = nFirst + nSecond;
nSecond = nFirst - nSecond ;
nFirst = nFirst - nSecond ;
}
// 快速排序
void quicksort(int nArray[], int nLeft, int nRight){
if(nLeft >= nRight){
return;
}
//临时数据
int left = nLeft, lcur = nLeft, lcount = 0;
int right = nRight, rcur = nRight, rcount = 0;
int nValue = nArray[left];
while(left < right){
while(left < right && nValue <= nArray[right])
{
if(nValue == nArray[right]){
swap(nArray[rcur], nArray[right]);
rcur--;
rcount++;
}
right--;
}
if(left < right){
nArray[left++] = nArray[right];
}
while(left < right && nArray[right] >= nValue){
if(nArray[left] == nValue){
swap(nArray[lcur], nArray[left]);
lcur++;
lcount++;
}
left++;
}
if(left < right){
nArray[right--] = nArray[left];
}
}
nArray[left] = nValue;
assert(left == right);
//交换右边相等区域
int index = right + 1;
while(rcount > 0 && index <= rcur && (nRight - (index-(right + 1))>rcur)){
swap(nArray[index,], nArray[nRight - (index - (right + 1)]);
index++;
}
//交换左边相等区域
index = left - 1;
while(lcount > 0 && indx >= lcur && (nLeft + (left - 1 - index) < lcur)){
swap(nArray[index,], nArray[nRight - (nLeft + (left - 1 - index)]);
index--;
}
}
Los resultados muestran
int main(){
int array[10] = {30, 20, 30, 50, 60, 30, 30, 40, 40, 35};
quicksort(array, 0, 10);
for(int i = 0; i < 10; i++){
printf("%d \n", array[i]);
}
}
observación
Dado que la red de la empresa con la mano pura código para jugar, el programa puede no ser la mejor solución, sólo para el intercambio de aprendizaje.