https://blog.csdn.net/yang03_26/article/details/80773280
参照上述文章中快速排序算法的源代码进行验证。在在线编程网站http://www.bccn.net/run/上测试通过。
#include
void printArray();
void swap(int i, int j);
void quickSort(int begin, int end);
int s_a[] = {2, 3, 1, 0, 0, 2, 5, 3, 1};
const int s_begin = 0;
const int s_end = sizeof(s_a) / sizeof(int) - 1;
int main() {
printf("The result is: \n");
printArray();
printf("\nAfter quickSort, the result is:\n");
quickSort(s_begin, s_end);
printArray();
return 0;
}
void printArray() {
int num = sizeof(s_a) / sizeof(int);
for (int i = 0; i < num; i++) {
if (i == num - 1) {
printf("%d", s_a[i]);
} else {
printf("%d, ", s_a[i]);
}
}
}
void quickSort(int begin, int end) {
if (begin < end) {
int i = begin;
int j = end;
while (i < j) {
while (s_a[i] < s_a[j] && i < j) {
j--;
}
if (i < j) {
swap(i, j);
i++;
}
while (s_a[i] < s_a[j] && i < j) {
i++;
}
if (i < j) {
swap(i, j);
j--;
}
}
if (i == j) {
quickSort(begin, i - 1);
quickSort(i + 1, end);
}
}
}
void swap(int i, int j) {
int temp = s_a[i];
s_a[i] = s_a[j];
s_a[j] = temp;
}
https://www.cnblogs.com/wzj4858/p/8241232.html
https://blog.csdn.net/qq_36770641/article/details/82669788
https://blog.csdn.net/jdbc/article/details/42173751
https://www.cnblogs.com/fengty90/p/3768827.html
#include
typedef enum {
false = 0,
true,
} bool;
void printArray();
void swap(int a[], int i, int j);
void quickSort(int a[], int begin, int end);
int findDuplicate(int a[], int begin, int end);
int findDuplicate2(int a[], int begin, int end);
int s_a[] = {2, 3, 1, 0, 6, 8, 5, 4, 7};
const int s_begin = 0;
const int s_end = sizeof(s_a) / sizeof(int) - 1;
int main() {
printf("Please enter a num: \n");
int b;
scanf("%d", &b);
printf("Your enter num is: %d. \n", b);
printf("The array is: \n");
printArray();
printf("\nAfter quickSort, the array is:\n");
quickSort(s_a, s_begin, s_end);
printArray();
int result = findDuplicate(s_a, s_begin, s_end);
printf("\nThe duplicate result = %d", result);
int result2 = findDuplicate2(s_a, s_begin, s_end);
printf("\nThe duplicate result2 = %d", result2);
return 0;
}
void printArray() {
int num = sizeof(s_a) / sizeof(int);
for (int i = 0; i < num; i++) {
if (i == num - 1) {
printf("%d", s_a[i]);
} else {
printf("%d, ", s_a[i]);
}
}
}
void quickSort(int a[], int begin, int end) {
if (begin < end) {
int i = begin;
int j = end;
while (i < j) {
while (a[i] < s_a[j] && i < j) {
j--;
}
if (i < j) {
swap(a, i, j);
i++;
}
while (a[i] < s_a[j] && i < j) {
i++;
}
if (i < j) {
swap(a, i, j);
j--;
}
}
if (i == j) {
quickSort(a, begin, i - 1);
quickSort(a, i + 1, end);
}
}
}
void swap(int a[], int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
int findDuplicate(int a[], int begin, int end) {
if (begin < end) {
int i = begin;
int j = end;
while (i < j - 1) {
if (a[i] == a[i + 1]) {
return a[i];
} else {
i++;
}
}
}
return -1;
}
// 一种复杂度为O(n)的解法:对长度为n,每个元素属于(0, n - 1),找出任意一个重复元素
int findDuplicate2(int a[], int begin, int end) {
if (a == NULL) {
return -1;
}
for (int k = begin; k <= end; k++) {
if (a[k] < 0 || a[k] >= end + 1) {
return -1;
}
}
int i = begin;
int j = end;
while (i < j) {
while (i != a[i]) {
if (a[i] == a[a[i]]) {
return a[i];
}
swap(a, i, a[i]);
}
i++;
}
return -1;
}
https://www.cnblogs.com/tongongV/p/11038578.html