一、选择排序
原理:用min标记最小数,然后通过比较改变min代指的值
实质还是冒泡排序,但更倾向于比较而非排序
每一轮找到最小值与第一个元素进行交换,以此类推
//交换两个数据
void Swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//选择排序
void SelectSort(int* arr, int size)
{
int i = 0;
for (i = 0; i < size-1; i++)
{
int min = i;
int j = 0;
for (j = i+1; j < size; j++)
{
if (arr[j] < arr[min])
{
min = j;
}
}
Swap(&arr[i], &arr[min]);
}
}
二、冒泡排序
原理:相邻的两个数进行比较,然后根据大小进行交换位置
int main()
{
int arr[10] = { 12,43,10,56,34,99,53,26,1,77 };
int i = 0;
int j = 0;
int temp = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz - 1; i++)//不要写成i从1加到sz,注意数组的下标
{
for (j =0; j < sz-1-i ;j++)
{
if (arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
三、插入排序
原理:把数据分为有序区和无序区,再通过比较,交换数据的办法,增加有序区的元素个数
swap(int* a, int* b)
{
int temp = *a;
* a = *b;
*b = temp;
}
int main()
{
int arr[10] = { 12,9,10,56,34,99,53,26,1,77 };//升序排列
int i = 0;
int j = 0;
int temp = 0;
int youxu = 1;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz - 1; i++)//不要写成i从1加到sz,注意数组的下标
{
youxu = i;//有序区第一个数字的下标
temp = arr[youxu + 1];//无序区第一个数字
while (youxu >= 0)
{
if (temp < arr[youxu])//不符合排序规则,需要交换
{
swap(&arr[youxu], &arr[youxu+1]);
youxu--;
}
else
break;
}
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}