排序的概念
- 排序是指将一组数据,按照特定的顺序进行排列的过程。
- 这个过程通常是为了使数据更加有序,从而更容易进行搜索、比较或其他操作。
常见的排序算法
插入排序
- 把待排序的记录,按其关键码值的大小,逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。
- 通俗的来说,就是分为两堆数据,第一堆已经按顺序排列好了,第二堆是无序的,然后从无序数据堆中取出第一个数据插入到第一堆进行排序,一直重复,直到第二堆没有数据。
- 我们玩扑克牌时,就用了插入排序的思想。
直接插入排序
cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void InsertSort(int* arr, int n);
void PrintSort(int* arr, int n);
void InsertSort(int* arr, int n)
{
for (int i = 0; i < n - 1; i++)
{
int end = i;//已经排序的序列最后一位的序号
int tmp = arr[end + 1];//待排序的序列第一位的数值
while (end >= 0)
{
if (arr[end] > tmp)
{
arr[end + 1] = arr[end];
end--;
}
else
{
break;
}
}
end++;
arr[end] = tmp;
}
}
void PrintSort(int* arr, int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 1,5,2,6,8,7,9,3,0,4 };
int n = sizeof(arr) / sizeof(int);
PrintSort(arr, n);
InsertSort(arr, n);
PrintSort(arr, n);
return 0;
}
下面是对直接插入排序的总结:
元素集合越接近有序,直接插入排序算法的时间效率越高。
时间复杂度(默认最差的情况):O(N^2)。数组有序且为降序的情况下时间复杂度最差。
空间复杂度:O(1)。