1.冒泡排序
void BubbleOnce(int a[], int n)//排一趟,前n个元素
{
int temp=0;
for (int i = 0; i < n - 1; i++)
{
if (a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
void BubbleSort(int a[],int length)
{
for (int i = length; i > 0; i--)//从n个长度到第一个元素对应的第一个长度
BubbleOnce(a, i);
}
2.选择排序
int FindMaxIndex(int a[], int n)
{
int max = a[0];
int maxi = 0;
for (int i = 0; i < n; i++)
{
if (a[i] > max)
{
max = a[i];
maxi = i;
}
}
return maxi;//返回index而不是值
}
void SelectSort(int a[],int n)
{
for (int i = 0;i<n;i++)
{
int maxi= FindMaxIndex(a,n-i);//当前最大元素的index
int tmp = a[n - i - 1];//最大元素与当前数组最后元素交换
a[n - i - 1] = a[maxi];
a[maxi] = tmp;
}
}
3.插入排序
void InsertSort(int A[], int N)
{
int j, P;
int Tmp;
for (P = 1; P < N; P++)
{
Tmp = A[P];//从第1下标元素开始,从左往右
//如果左边的元素 比tmp位置元素大,则:
for (j=P;j>0&&A[j-1]>Tmp;j--)
{
//左边元素的值赋给右边元素,直到某个位置左边元素比tmp小,则
A[j] = A[j - 1];
}
A[j] = Tmp;//将tmp值插入该位置
for (int i = 0; i < N; i++)
{
printf_s("%d\t", A[i]);
}
}
printf_s("\n");
}
4.希尔排序
void ShellSort(int A[],int N)
{
int i, j, Increment;
int Tmp;
for (Increment = N / 2; Increment > 0; Increment = Increment / 2)
{
for (i= Increment; i < N; i++)
{
Tmp = A[i];
for (j = i; j >= Increment; j = j - Increment)
{
if (Tmp < A[j - Increment])
{
A[j] = A[j - Increment];
}
else
{
break;
}
}
A[j] = Tmp;
for (int i = 0; i < N; i++)
{
printf_s("%d\t", A[i]);
}
}
}
}
5.快速排序
void QuickSort(int* arr, int L, int R)
{
int pleft = L;
int pRight = R;
int poi = arr[(L + R) / 2];
while (pleft < pRight)
{
while (pleft < pRight&&arr[pleft] < poi)//没有等号
{
pleft++;
}
while (pRight > pleft&&arr[pRight] > poi)//没有等号
{
pRight--;
}
if (pleft <= pRight)//有等号
{
int temp = arr[pleft];
arr[pleft] = arr[pRight];
arr[pRight] = temp;
pleft++;//再移动1次
pRight--;//再移动1次
}
}
if (L < pRight)//定义出口,没有等号
{
QuickSort(arr, L, pRight);
}
if (pleft < R)//定义出口,没有等号
{
QuickSort(arr, pleft, R);
}
}