循环遍历,将每次得到新的无序值参与到有序列表中重新排序.
比如: 发扑克牌,未发的牌就是无序序列, 当我们每起一张牌会将手里已经有的牌重新排序
// 升序排序
int arr[] = {5, 4, 3, 6, 9, 7, 10, 8};
int size = ArraySize(arr);
// 主循环
int insertIndex = 0; // 记录当前需要插入元素的下标
for(int i = 0; i < size; i++){
insertIndex = i; // 当前新加入到有序列表中的最后下标
// 将新加入需要排序的值和有序列表进行重新排序
while(insertIndex >= 1)
{
// 为新加入的值重新排序
if(arr[insertIndex - 1] > arr[insertIndex]) // 5 > 4
{
// 当前有序值 和当前无序值进行位置交换
int temp = arr[insertIndex - 1];
arr[insertIndex - 1] = arr[insertIndex];
arr[insertIndex] = temp;
}
insertIndex--;
}
printf("主循环次数:%i,排序后的结果:[%i, %i, %i, %i, %i, %i, %i, %i]",
i,arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7]);
}
//降序排序
int arr[] = {5, 4, 3, 6, 9, 7, 10, 8};
int size = ArraySize(arr);
// 主循环
int insertIndex = 0; // 记录当前需要插入元素的下标
for(int i = 0; i < size; i++){
insertIndex = i; // 当前新加入到有序列表中的无序下标号
// 将新加入需要排序的值和有序列表进行重新排序
while(insertIndex >= 1)
{
// 为新加入的值重新排序
if(arr[insertIndex - 1] < arr[insertIndex]) // 5 > 4
{
// 当前有序值 和当前无序值进行位置交换
int temp = arr[insertIndex - 1];
arr[insertIndex - 1] = arr[insertIndex];
arr[insertIndex] = temp;
}
insertIndex--;
}
printf("主循环次数:%i,排序后的结果:[%i, %i, %i, %i, %i, %i, %i, %i]",
i,arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7]);
}