排序算法

来源:互联网 发布:赵丽颖演技 知乎 编辑:程序博客网 时间:2024/06/03 18:38

void quicksort(int arr[], int length){

        if(!arr || length < 2)       // 注意length 是小于2,而不是小于1

                return;

        else if(length == 2)      //当长度为2时,一定要进行判断返回,否则递归无法结束

        {

                if (arr[0] > arr[1])

                {

                        int t = arr[0];

                        arr[0] = arr[1];

                        arr[1] = t;

                }

                return;

        }

        int left = 0;

        int right = length - 1;

        int flag = arr[length / 2];

        while(left < right)

        {

                while (arr[left] < flag && left < right)       //如果 left >= right, 则提前结束

                        left++;

                while (arr[right] > flag && left < right)

                        right--;

                 if (left < right)

                {

                        int t = arr[left];

                        arr[left] = arr[right]; 

                       arr[right] = t;

                        left++; 

                       right--;

                }

        }

        quicksort(arr, right+1);                 //这么写,表示中间相同的部分不需要再进行排序

        quicksort(arr+left, length-left);

}


void mergesort(int arr[], int length){        if(!arr || length <2)                return;        elseif(length ==2)        {                if(arr[0]> arr[1])                {                        int t = arr[0];                        arr[0]= arr[1];                        arr[1]= t;                }                return;        }         int leftlength = length /2;        int rightlength = length - leftlength;        mergesort(arr, leftlength);        mergesort(arr+leftlength, rightlength);         //将上面的两部分进行合并        int i =0;        int j =0;        int index =0;        int*temp =newint[length];        while(i < leftlength && j < rightlength)        {                while(arr[i]<= arr[leftlength+j]&& i < leftlength)                        temp[index++]= arr[i++];                 while(arr[leftlength+j]<= arr[i]&& j < rightlength)                        temp[index++]= arr[leftlength + j++];        }         //将剩余的部分进行追加        if(i == leftlength)        {                while(j < rightlength)                        temp[index++]= arr[leftlength + j++];        }        else        {                while(i < leftlength)                        temp[index++]= arr[i++];        }         //将临时数组中的内容复制到原数组        for(int i =0; i < length;++i)        {                arr[i]= temp[i];        }        delete[]temp;

}



void bubblesortpro(int arr[], int length)

{

if (!arr || length < 2)

return;

 

int size = length;

while(size > 1)

{

int newsize = 0;

for (int i = 0; i < size-1; ++i)

{

if (arr[i] > arr[i+1])

{

newsize = i+1;

int t = arr[i];

arr[i] = arr[i+1];

arr[i+1] = t;

}

}

size = newsize;

}

}

原创粉丝点击