快速排序(自己实现)

来源:互联网 发布:合肥淘宝合作快递 编辑:程序博客网 时间:2024/05/21 17:16
#include<iostream>
#include<string>
#include<ctime>
using namespace std;
class solution
{
public:
void swap(int data[], int randnum, int end)
{
int temp;
temp = data[end];
data[end] = data[randnum];
data[randnum]=temp;
}
int partition(int data[],int start,int end,int length )
{
if (length <= 0 || start < 0 || end>length || (data == nullptr))
throw new exception("wrong input");
srand(unsigned int(NULL));
int randn = rand();
int randnum=randn%(end-start)+start;
swap(data,randnum, end);
int small = start - 1;
//int index = 0;
for (int index = start; index < end; index++)
{
if (data[index] < data[end])
{
small++;//
if (small != index)
{
swap(data,small, index);
}
}

}
small++;
swap(data, small, end);
return small;
}
void quick_sort(int data[],int start,int end,int length)
{
if (data == nullptr || length == 0)
throw new exception("wrong input");
if (start == end)
{
return;
}
int index=partition(data, start, end, length);
if (index > start)
{
//int lengthlf = index - start;
quick_sort(data, start, index-1,length );
}
if (index < end)
{
//int lengthrt = end - index;
quick_sort(data, index+1,end, length);
}
}


};
int main()
{
solution s;
int data[6] = { 0, 2, 4, 3, 1, 5 };
s.quick_sort(data, 0, 5, 6);
for (int i = 0; i < 6; i++)
{
cout << data[i]<<' ';
}
}