public static void QuickSort(int ss, int ee, int arryData[]) {
int st = ss; // 左侧开始位置
int ed = ee; // 右侧结束位置
if (st >= ed) {
return;
}
// data保存开始的时候,左侧开始位置的数值
int data = arryData[st];
while (st != ed) {
// 从右侧开始,寻找第一个比data值小的数
while (arryData[ed] >= data && st < ed) {
ed--;
}
// 将该数放入st指示的左侧开始下标位置,不用担心会丢失,arryData[st]已经提前保存到data中
// 然后左侧开始位置下标向右移动1位,
if (st < ed) {
arryData[st] = arryData[ed];
st++;
}
// 从左侧开始位置st(已经向右移动了1位),向右查找第一个比data大的值
while (data > arryData[st] && st < ed) {
st++;
}
// 将该数放入ed指示的右侧下标位置,不用担心会丢失,arryData[ed]已经保存到了arryData[st]中;
// 然后右侧位置下标ed向左移动1位,
if (st < ed) {
arryData[ed] = arryData[st];
ed--;
}
}
// 退出while循环,说明st和ss已经相等,将data值写入到该位置,然后递归。就ok了
arryData[st] = data;
if (st - ss > 1) {
QuickSort(ss, st - 1, arryData);
}
if (ee - ed > 1) {
QuickSort(ed + 1, ee, arryData);
}
}
快速排序
最新推荐文章于 2024-07-26 12:28:02 发布