#include<stdio.h>
#include<iostream>
using namespace std;
typedef int Datatype;
void insertsort1(Datatype r[], int n) {
int i, j;
Datatype s;
for (i = 1; i <= n - 1; i++) {
s = r[i];
j = i - 1;
while (j > -1 && s < r[j]) {
r[j + 1] = r[j];
j--;
}
r[j + 1] = s;
}
for (i = 0; i < 16; i++) {
cout << r[i];
}
}
void insertsort2(Datatype r[], int n,Datatype r1[]) {
int i, j;
for (i = 0; i <= n; i++) {
r1[i+1] = r[i];
}
for (i = 2; i <= n; i++) {
r1[0] = r1[i];
j = i - 1;
while (r1[0] < r1[j])
r1[j + 1] = r1[j--];
r1[j + 1] = r1[0];
}
for (i = 1; i < 17; i++) {
cout << r1[i];
}
}
void selectsort(Datatype R[], int n) {
int i, j, small;
Datatype temp;
for (i = 1; i <= n; i++) {
small = i - 1;
for (j = i; j <= n - 1; j++)
if (R[j]< R[small])
small = j;
if (small != i - 1) {
temp = R[i - 1];
R[i - 1] = R[small];
R[small] = temp;
}
}
for (i = 0; i < 16; i++) {
cout << R[i];
}
}
void bubblesort(Datatype x[], int n) {
int i, j, flag = 1;
Datatype temp;
for (i = 1; i <= n - 1 && flag == 1; i++) {
flag = 0;
for(j=0;j<n-i;j++)
if (x[j] > x[j + 1]) {
flag = 1;
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
}
}
for (i = 0; i < 16; i++) {
cout << x[i];
}
}
int main() {
int i = 0, x, y=1;
while (y==1) {
Datatype r[] = { 1,4,2,4,5,6,8,5,4,3,2,5,8,5,2,3 };
Datatype r1[17];
cout << "选择你要排序的方法(1:冒泡,2:直接插入排序,3:选择排序,4:改进版插入排序)" << endl;
cin >> x;
switch (x) {
case 1: bubblesort(r, 16);
break;
case 2:insertsort1(r, 16);
break;
case 3:selectsort(r, 16);
break;
case 4:insertsort2(r, 16, r1);
break;
default:
for (i = 0; i < 16; i++) {
cout << r[i];
}
}
cout << endl;
cout << "是否继续排序?(1:继续)" << endl;
cin >> y;
}
}