#include<iostream>
#include<ctime>
using namespace std;
//快速排序
int partition(int a[], int left, int right) {
int pivot = a[left];
while (left < right) {
while (left < right && a[right] >= pivot)--right;
if (left < right)a[left++] = a[right];
while (left < right && a[left <= pivot])++left;
if (left < right)a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void quicksort(int a[], int left, int right) {
if (left < right) {
int pivotpos = partition(a, left, right);
quicksort(a, left, pivotpos - 1);
quicksort(a, pivotpos + 1, right);
}
}
//选择排序
void selectsort(int a[], int size) {
int minindex, temp;
for (int i = 0; i < size; i++) {
minindex = i;
for (int j=i; j < size; j++) {
if (a[minindex] > a[j]) {
minindex = j;
}
}
temp = a[i];
a[i] = a[minindex];
a[minindex] = temp;
for (int j = 0; j < size; j++)
cout << a[j] << ",";
cout << endl;
}
}
//插入排序
void insertsort(int a[], int n) {
int inserter, index;
for (int i = 1; i < n; i++) {
inserter = a[i];
index = i - 1;
while (index >= 0 && inserter < a[index]) {
a[index + 1] = a[index];
index--;
}
a[index + 1] = inserter;
for (int i = 0; i < n; i++) {
cout << a[i] << ",";
}
cout << endl;
}
}
//希尔排序
void shellsort(int a[], int n) {
int i, j, gap, t;
for (gap = n / 2; gap > 0; gap = gap / 2) {
for (i = gap; i < n; i++) {
for (j = i; j = gap >= 0 && a[j - gap] > a[j]; j = j - gap) {
t = a[j - gap];
a[j - gap] = a[j];
a[j] = t;
}
}
for (int i = 0; i < n; i++) {
cout << a[i] << ",";
}
cout << endl;
}
}
//冒泡排序
void bubblesort(int a[], int n) {
int t;
for (int i = 1; i < n; i++) {
for (int j = 0; j < n - i; j++) {
if (a[j + i] < a[j]) {
t = a[j + 1];
a[j + 1] = a[j];
a[j] = t;
}
}
for (int i = 0; i < n; i++) {
cout << a[i] << ",";
}
cout << endl;
}
}
//归并排序
void merge(int a[], int left, int mid, int right, int temp[]) {
int p0 = 0;
int p1 = left, p2 = mid + 1;
while (p1 <= mid && p2 <= right) {
if (a[p1] < a[p2])
temp[p0++] = a[p1++];
else
temp[p0++] = a[p2++];
}
while (p1 <= mid)
temp[p0++] = a[p1++];
while (p2 <= right)
temp[p0++] = a[p2++];
for (int i = 0; i < right - left + 1; ++i)
a[left + i] = temp[i];
}
void mergesort(int a[], int left, int right, int temp[]) {
if (left < right) {
int mid = (left + right) >> 1;
mergesort(a, left, mid, temp);
mergesort(a, mid+ 1, right, temp);
merge(a, left, mid, right, temp);
}
}
int main() {
srand(time(0));
int array[11];
for (int i = 0; i < 10; i++) {
array[i] = rand() % 100;
}
cout << "--------------输入的原始序列:------------------" << endl;
for (int i = 0; i < 10; i++) {
cout << array[i] << ",";
}
cout << endl;
quicksort(array, 0, 9);
cout << "--------------快速排序--------------------" << endl;
for (int i = 0; i < 10; i++)
{
cout << array[i] << ",";
}
cout << endl;
cout << "--------------选择排序-------------------" << endl;
selectsort(array, 10);
cout << "---------------插入排序----------------------" << endl;
insertsort(array, 10);
cout << "----------------希尔排序-------------------" << endl;
shellsort(array, 10);
cout << "------------------冒泡排序--------------------" << endl;
bubblesort(array, 10);
cout << "---------------------归并排序------------------" << endl;
int* temp = new int[10];
mergesort(array, 0, 9, temp);
for (int j = 0; j < 10; j++)
cout << array[j] << ",";
return 0;
}
快速归并插入希尔冒泡排序代码全部
于 2022-05-11 21:34:15 首次发布