快速排序算法模板
程序员文章站
2022-03-24 12:41:12
...
模板一
void QuickSort(int a[], int left, int right){
int i = left, j = right, mid = a[(i + j) >> 1];
while (i < j){
while (a[i] < mid) i++;
while (a[j] > mid) j--;
if (i <= j){
swap(a[i], a[j]);
i++; j--;
}
}
if (left < j) QuickSort(a, left, j);
if (right > i) QuickSort(a, i, right);
}
模板二
int a[10000 + 5];//排序的数组声明
void QuickSort(int left, int right){
int i = left, j = right, mid = a[(i + j) >> 1];
while (i < j){
while (a[i] < mid) i++;
while (a[j] > mid) j--;
if (i <= j){
swap(a[i], a[j]);
i++; j--;
}
}
if (left < j) QuickSort(left, j);
if (right > i) QuickSort(i, right);
}
模板三
//调用格式:QuickSort(数组名, 0, vec长度 - 1),当然也可以局部排序,输入相应的下标位置即可
void QuickSort(int vec[], int left, int right) {
if (left > right)
return;
int i = left, j = right, t = vec[left];
while (i != j) {
while (vec[j] >= t && i < j) //升序
//while (vec[j] <= t && i < j) //降序
j--;
while (vec[i] <= t && i < j) //升序
//while (vec[i] >= t && i < j) //降序
i++;
if (i < j) {
swap(vec[i], vec[j]);
}
}
vec[left] = vec[i];
vec[i] = t;
QuickSort(vec, left, i - 1);
QuickSort(vec, i + 1, right);
}
模板四
int vec[100];//排序的数组声明
//调用格式:QuickSort(0, vec长度 - 1),当然也可以局部排序,输入相应的下标位置即可
void QuickSort(int left, int right) {
if (left > right)
return;
int i = left, j = right, t = vec[left];
while (i != j) {
while (vec[j] >= t && i < j) //升序
//while (vec[j] <= t && i < j) //降序
j--;
while (vec[i] <= t && i < j) //升序
//while (vec[i] >= t && i < j) //降序
i++;
if (i < j) {
swap(vec[i], vec[j]);
}
}
vec[left] = vec[i];
vec[i] = t;
QuickSort(left, i - 1);
QuickSort(i + 1, right);
}
代码测试一
#include<iostream>
using namespace std;
void QuickSort(int vec[], int left, int right) {
if (left > right)
return;
int i = left, j = right, t = vec[left];
while (i != j) {
while (vec[j] >= t && i < j) //升序
//while (vec[j] <= t && i < j) //降序
j--;
while (vec[i] <= t && i < j) //升序
//while (vec[i] >= t && i < j) //降序
i++;
if (i < j) {
swap(vec[i], vec[j]);
}
}
vec[left] = vec[i];
vec[i] = t;
QuickSort(vec, left, i - 1);
QuickSort(vec, i + 1, right);
}
int main() {
int vec[10] = { 3,5,8,2,6,7,4,9,1,10 }; //要排序的数组
QuickSort(vec, 0, sizeof(vec) / sizeof(int) - 1);
for (int i = 0; i < sizeof(vec) / sizeof(int); i++) {
cout << vec[i] << " ";
}
return 0;
}
代码测试二
#include<iostream>
using namespace std;
int a[10] = { 3,5,8,2,6,7,4,9,1,10 }; //要排序的数组
void QuickSort(int left, int right) {
int i = left, j = right, mid = a[(i + j) >> 1];
while (i < j) {
while (a[i] < mid) i++;
while (a[j] > mid) j--;
if (i <= j) {
swap(a[i], a[j]);
i++; j--;
}
}
if (left < j) QuickSort(left, j);
if (right > i) QuickSort(i, right);
}
int main() {
QuickSort(0, sizeof(a) / sizeof(int) - 1);
for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
cout << a[i] << " ";
}
return 0;
}
上一篇: Mybatis if test无效的原因(字符串比较)
下一篇: 快速排序模板