一、基本思路
将无序序列插入到有序序列中
二、在什么情况下使用效率最高?
1、数据序列基本有序
2、数据序列量较少
三、插入排序图解
#include<bits/stdc++.h> using namespace std; #define MAX 10 //交换函数 void Swap(int* a,int* b) { int temp=*a; *a=*b; *b=temp; } //打印函数 void printArray(int arr[],int length) { for(int i=0;i<length;i++) { cout<<arr[i]<<" "; } cout<<endl; } void insertSort(int arr[],int length) { int j; for(int i=1;i<length;i++) { if(arr[i]<arr[i-1]) { int temp=arr[i]; for(j=i-1;j>=0&&temp<arr[j];j--) { arr[j+1]=arr[j]; } arr[j+1]=temp; } } } int main() { int arr[MAX]; srand((unsigned int)time(NULL)); for(int i=0;i<MAX;i++) { int randNum=rand()%MAX; arr[i]=randNum; } printArray(arr,MAX); insertSort(arr,MAX); printArray(arr,MAX); return 0; }
注意点:
一、内层循环结束后,temp所存放的内容要放入arr[j+1]内,而不是放入arr[j]中。
二、内层循环的int j要初始化为i-1
三、外层循环的int i初始化为1,因为下标为0的元素已经默认为有序(单独一个元素肯定有序)