风之城的插入排序
#include <iostream>
void swap(int *a , int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void printArray(int arr[], int size)
{
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
//先把第一个元素设置为已经排好序的元素,然后将第一个元素和第二个比较,将小的拍前面,然后将 sortedLenth加1
//如果排好序的部分元素比新调换进来的元素大,则从后往前一一对比,将排好序的部分元素再排好一遍序
void insertionSort(int arr[], int size)
{
int sortedLenth = 1;
int i;
for(i=1;i<size;i++)
{
if(arr[sortedLenth-1] > arr [i])
{
swap(&arr[sortedLenth-1] , &arr [i]);
for(int s=sortedLenth-1;s>0;s--)
{
if(arr[s] < arr[s-1])
{
swap(&arr[s] , &arr [s-1]);
}
}
}
sortedLenth++;
}
}
int main()
{
int arr[] = { 12, 11, 13, 5, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
printArray(arr, n);
insertionSort(arr, n);
printArray(arr, n);
return 0;
}
Time Complexity: O(n*2)
Auxiliary Space: O(1)