按照左小右大的顺序排列,若左边的前X个元素在排序之前已经有序,那么将X + 1位置的元素与X位置的元素比较,有两种情况,若它比X位置元素大,那么它的位置固定不变;若它小于X位置的元素,那么将它和X位置元素位置互换。换后再将X位置元素与X - 1位置元素比较,按刚才的方式一直下去,直到前X + 1位有序为止。这时再将X + 2与X+ 1比较,按照刚才的方式。这样下去直到全部有序。前面我们设置了X,现在我们把这个X值为1, 那么前一位肯定是有序的了。所以任何序列都可以用插入排序
#include#include #include using namespace std; int data[10] = {0, 2, 1, 4, 3, 6, 5, 8, 7, 9}; void swap(int i, int j) { int int_temp = 0; int_temp = data[i]; data[i] = data[j]; data[j] = int_temp; } void insert(int* data) { for(int i = 1; i < 10; i++) //左->右 大->小 { if(data[i] > data[i - 1]) //判断是否需要交换 { for(int j = i; j > 0; j--) { if(data[j] < data[j - 1]) { swap(j, j - 1); } } } } } int main(void) { insert(data); for(int i = 0; i < 10; i++) { cout << i << " : " << data[i] << endl; } return 0; }



