直接插入排序是稳定的排序,时间复杂度为O(n^2)
#include<iostream>
using namespace std;
void sorting(int arr[],int n)
{
for(int i = 1;i < n;i++)
{
if(arr[i] >= arr[i-1])
continue;
int current = arr[i];
int j;
for(j = i-1;j >= 0;j--)
{
if(current >= arr[j])
break;
}
for(int k = i-1;k >= j+1;k--)
arr[k+1] = arr[k];
arr[j+1] = current;
}
}
int main()
{
int arr[] = {8,7,2,9,4,2,1,0,10,-2,6};
int n = sizeof(arr) / sizeof(arr[0]);
sorting(arr, n);
for(int i = 0;i < n;i++)
cout<<arr[i]<<" ";
cout<<endl;
return 0;
}
更简单的更优化的代码是,边比较边移动,这就不用搞错插入位置了。
<pre name="code" class="cpp">#include<iostream>
using namespace std;
void sorting(int arr[],int n)
{
for(int i = 1;i < n;i++)
{
int j = i;
while(j>0 && arr[j]<arr[j-1])
{
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
j--;
}
}
}
int main()
{
int arr[] = {8,7,2,9,4,2,1,0,10,-2,6};
int n = sizeof(arr) /sizeof(arr[0]);
sorting(arr, n);
for(int i = 0;i < n;i++)
cout<<arr[i]<<" ";
cout<<endl;
return 0;