#include <iostream>
#define MAXSIZE 100
结构体
typedef struct {
int key;
// int other;
}recordtype;
typedef struct{
recordtype r[MAXSIZE+1];
int length;
}table;
1.直接插入排序(插入排序)
void insertsort(int a[],int n){
int i,j,x;
for (i=1;i<n;i++){
x=a[i];
j=i-1;
while(j>=0 && a[j] > x){
a[j+1]=a[j];
j--;
}
a[j+1]=x;
}
}
void insertsortsb(int a[],int n){
int i,j;
for (i=1;i<n;i++){
a[0]=a[i];
j=i-1;
while(j>=0 && a[j] > a[0]){
a[j+1]=a[j];
j--;
}
a[j+1]=a[0];
}
}
2.二分插入排序(插入排序)
void binarysort(table* tab){
int i,j,left,right,mid;
for (i = 2; i < tab->length; ++i) {
tab->r[0] = tab->r[i];
left=1;right=i-1;
while (left <=right){
mid=(right+left)/2;
if (tab->r[i].key <tab->r[mid].key)
right=right-1;
else
left=left+1;
}
for (j=i-1; j >= left ; j--) {
tab->r[j+1]=tab->r[j];
tab->r[left]=tab->r[0];
}
}
}
3.希尔排序(插入排序)
void shellinsertsort(table* tab)
{
int i,j,d;
d=tab->length/2;
while (d>=1){
for (i = d+1; i <=tab->length; i++) {
tab->r[0]=tab->r[i];
j=i-d;
while (j > 0 && tab->r[0].key < tab->r[j].key)
{
tab->r[j+d]=tab->r[j];
j=j-d;
}
tab->r[j+d]=tab->r[0];
}
d/2;
}
}
void shellinsertsort2(int a[],int length)
{
int i,j,x,d;
d=length/2;
while(d>=1){
for (i = d; i< length; i++) {
x=a[i];
j=i-d;
while (x<a[j] && j>=0)
{
a[j+d]=a[j];
j=j-d;
}
a[j+d]=x;
}
d=d/2;
}
}
4.直接选择排序(选择排序)
void simpleelectsort(table* tab)
{
int i,j,k;
for (i = 1; i <=tab->length-1; i++) {
k=i;
for (j = i+1; j <=tab->length; j++) {
if (tab->r[j].key < tab->r[k].key)
k=j;
if (k!=i){
tab->r[0]=tab->r[k];
tab->r[k]=tab->r[i];
tab->r[i]=tab->r[0];
}
}
}
}
void simpleelectsort2(int a[],int length)
{
int i,j,k;
for (i = 1; i <=length-1; i++) {
k=i;
for (j = i+1; j <=length; j++) {
if (a[j] < a[k])
{
k=j;
}
if (k!=i){
a[0]=a[k];
a[k]=a[i];
a[i]=a[0];
}
}
}
}
5.冒泡排序(交换排序)
void bubblesort(table* tab){
int i,j,done;
i=1;
done=1;
while(i<=tab->length && done)
{
done = 0;
for(j=1;j<=tab->length-i;j++){
if (tab->r[j + 1].key < tab->r[j].key)
{
tab->r[0] = tab->r[j];
tab->r[j] = tab->r[j + 1];
tab->r[j + 1] = tab->r[0];
done = 1;
}
}
i++;
}
}
void bubblesort2(int a[],int length){
int i,j,done;
i=1;
done=1;
while(i<=length && done)
{
done = 0;
for(j=1;j<=length-i;j++){
if (a[j + 1] < a[j])
{
a[0] = a[j];
a[j] = a[j + 1];
a[j + 1] = a[0];
done = 1;
}
}
i++;
}
}
6.快速排序(交换排序)
void quicksort(table* tab, int left, int right)
{
int i, j;
if (left < right)
{
i = left; j = right;
tab->r[0] = tab->r[i];
do {
while (tab->r[j].key > tab->r[0].key && i < j)
j--;
if (i < j)
{
tab->r[i].key = tab->r[j].key;
i++;
}
while (tab->r[i].key < tab->r[0].key && i < j)
i++;
if (i < j)
{
tab->r[j].key = tab->r[i].key;
j--;
}
} while (i != j);
tab->r[i]=tab->r[0];
quicksort(tab, left, i - 1);
quicksort(tab, i + 1, right);
}
}
void quicksort2(int a[],int length, int left, int right)
{
int i, j;
if (left < right)
{
i = left; j = right;
a[0] = a[i];
do {
while (a[j] > a[0] && i < j)
j--;
if (i < j)
{
a[i] = a[j];
i++;
}
while (a[i] < a[0] && i < j)
i++;
if (i < j)
{
a[j] = a[i];
j--;
}
} while (i != j);
a[i]=a[0];
quicksort2(a,length, left, i - 1);
quicksort2(a,length, i + 1, right);
}
}
int main() {
int a[]={0,27,46,5,18,16,51,32,26};
int size = 9;
quicksort2(a,size,1,size);
for (int i = 1; i < size; i++) {
printf("%d\t",a[i]);
}
return 0;
}