#include <stdio.h>
void BubbleSort(int arr[], int length);
int main()
{
printf("*******排序算法*******\n") ;
while(1)
{
printf("输入数字:") ;
int i,n=0,a[n];
for(i=0;; i++)
{
scanf("%d",&a[i]);
n++;
if(getchar()=='\n')break;
}
BubbleSort(a,n);
for(i=0; i<n; i++)
{
if(i==n-1)
printf("%d\n",a[i]);
else if(i==0)
printf("排序后:%d ",a[i]);
else
printf("%d ",a[i]);
}
}
}
void BubbleSort(int arr[], int length)
{
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp;
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
void SelectionSort(int arr[], int length)
{
for (int i = 0; i < length; i++)
{
int index = i;
for (int j = i+1; j < length; j++)
{
if (arr[j] < arr[index])
{
index = j;
}
}
if (index == i)
continue;
else
{
int temp;
temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
}
void InsertSort(int arr[], int length)
{
for (int i = 1; i < length; i++)
{
int j;
if (arr[i] < arr[i - 1])
{
int temp = arr[i];
for (j = i - 1; j >= 0 && temp < arr[j]; j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
}
void ShellSort(int arr[], int length)
{
int increasement = length;
int i, j, k;
do
{
increasement = increasement / 3 + 1;
for (i = 0; i < increasement; i++)
{
for (j = i + increasement; j < length; j += increasement)
{
if (arr[j] < arr[j - increasement])
{
int temp = arr[j];
for (k = j - increasement; k >= 0 && temp < arr[k]; k -= increasement)
{
arr[k + increasement] = arr[k];
}
arr[k + increasement] = temp;
}
}
}
}
while (increasement > 1);
}
void QuickSort(int arr[], int start, int end)
{
if (start >= end)
return;
int i = start;
int j = end;
int baseval = arr[start];
while (i < j)
{
while (i < j && arr[j] >= baseval)
{
j--;
}
if (i < j)
{
arr[i] = arr[j];
i++;
}
while (i < j && arr[i] < baseval)
{
i++;
}
if (i < j)
{
arr[j] = arr[i];
j--;
}
}
arr[i] = baseval;
QuickSort(arr, start, i - 1);
QuickSort(arr, i + 1, end);
}
void MergeSort(int arr[], int start, int end, int * temp)
{
if (start >= end)
return;
int mid = (start + end) / 2;
MergeSort(arr, start, mid, temp);
MergeSort(arr, mid + 1, end, temp);
int length = 0;
int i_start = start;
int i_end = mid;
int j_start = mid + 1;
int j_end = end;
while (i_start <= i_end && j_start <= j_end)
{
if (arr[i_start] < arr[j_start])
{
temp[length] = arr[i_start];
length++;
i_start++;
}
else
{
temp[length] = arr[j_start];
length++;
j_start++;
}
}
while (i_start <= i_end)
{
temp[length] = arr[i_start];
i_start++;
length++;
}
while (j_start <= j_end)
{
temp[length] = arr[j_start];
length++;
j_start++;
}
for (int i = 0; i < length; i++)
{
arr[start + i] = temp[i];
}
}