1. 选择排序
//选择法
void Swap(int *arr, int index_a, int index_b)
{
int tmp = *(arr + index_a);
*(arr + index_a) = *(arr + index_b);
*(arr + index_b) = tmp;
}
void Select_Sort(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
int k = i;
//寻找每一趟中最小元素的下标
for (int j = i + 1; j < size; j++)
{
if (arr[j] < arr[k])
{
k = j;
}
}
Swap(arr, i, k);
}
}
void Print(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
printf(" %d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 3, 1, 9, 2, 8, 7, 6, 5, 0, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
Print(arr, size);
Select_Sort(arr, size);
Print(arr, size);
system("pause");
return 0;
}
2.插入法
//插入法
//1. 元素拿出来
//2. 符合条件的元素后移
void Insert_Sort(int *arr, int size)
{
for (int i = 1; i < size; i++)
{
int k = i;
int tmp = arr[i];
for (int j = i - 1; j >= 0 && arr[j]>tmp; --j)
{
arr[j + 1] = arr[j];
k = j;
}
//如果没有后移则插在原位置
arr[k] = tmp;
}
}
void Print(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
printf(" %d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 3, 1, 9, 2, 8, 7, 6, 5, 0, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
Print(arr, size);
Insert_Sort(arr, size);
Print(arr, size);
system("pause");
return 0;
}
3. 冒泡排序
//冒泡排序
void Swap(int *arr, int index_a, int index_b)
{
int tmp = *(arr + index_a);
*(arr + index_a) = *(arr + index_b);
*(arr + index_b) = tmp;
}
void Foaming_Method(int *arr, int size)
{
int k = size - 1;
for (int i = 0; i<size; i++)
{
int tag = 1;
for (int j = 0; j < k; j++)
{
if (arr[j]>arr[j + 1])
{
Swap(arr, j, j + 1);
tag = 0;
}
}
if (tag)
{
break;
}
--k;
}
}
void Bottom_Method(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
int tag = 1;
for (int j = size - 1; j>i; j--)
{
if (arr[j] < arr[j - 1])
{
Swap(arr, j, j - 1);
tag = 0;
}
}
if (tag)
{
break;
}
}
}
void Print(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
printf(" %d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 3, 1, 9, 2, 8, 7, 6, 5, 0, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
Print(arr, size);
Bottom_Method(arr, size);
Print(arr, size);
system("pause");
return 0;
}