快排
#include<iostream>
#define SIZE 5
void swap(int&a, int &b);
void q_sort(int a[], int left, int right);
int main()
{
// int a[10] = {1 ,4 ,10 ,3 ,5 ,8 ,0 ,18, 16 ,20};
int a[5] = {5,4,3,2,1};
int left = 0;
int right = SIZE-1;
q_sort(a,left,right);
std::cin.get();
return 0;
}
void swap(int&a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void q_sort(int a[], int left, int right)
{
if (right > left)
{
int i, j, temp;
i = left+1;
j = right;
temp = a[left];
while (i<j)
{
while (temp < a[j] )
j--;
while (temp>a[i] && i<=right)
i++;
if (i < j) swap(a[i], a[j]);
}
if (a[left]>a[j])
swap(a[left], a[j]);
q_sort(a, left, j-1);
q_sort(a, j + 1, right);
}
}
一个快排好多问题
首先 对程序中 如果数组是按照降序排列 会导致一直找不到大于temp的值,导致i会越界,但是貌似c++不会对数组越界报错,so需要人为加一个边界条件,限制i的大小,防止越界
在交换left和J之前,需要一个判断语句,主要是前面进入循环的while(i<j),因为在循环之前,认为的将i+1,导致当数组只有两个数的时候,会i==j,然后不进入循环,直接swap,so要加一个限制条件。
版权声明:本文为博主原创文章,未经博主允许不得转载。

浙公网安备 33010602011771号