测试代码1.0:
#include <iostream>
using namespace std;
int main()
{
int cards[17]={56,32,67,12,23,89,3,14,2,25,43,31,1,24,44,35,76};
for(int i = 1; i < 17; i++)
{
int target = cards[i];
int low = 0, high = i - 1, id = -1;
int counter = 0;
while (low <= high)
{
int middle = (low + high) / 2;
if(cards[middle] >= target)
high = middle - 1;
else
low = middle + 1;
cout << "low:" << low << '\t' << "high:" << high << endl; //测试代码
}
id = high + 1;
if(id != -1)
{
for(int j = i; j > id; j--)
cards[j] = cards[j - 1];
cards[id] = target;
counter++;
}
cout << "id:" << id << '\t' << cards[id] << '\t' << "counter:" << counter << endl; //测试代码
}
for(int i = 0; i < 17; i++)
cout << cards[i] << '\t';
return 0;
}
测试代码2.0:
#include <iostream>
using namespace std;
int main()
{
int cards[17]={56,32,67,12,23,89,3,14,2,25,43,31,1,24,44,35,76};
cout << "原始数据:" << endl;
for(int i = 0; i < 17; i++)
cout << cards[i] << '\t';
cout << endl;
for(int i = 1; i < 17; i++)
{
int target = cards[i];
int low = 0, high = i - 1, id = -1;
while (low <= high)
{
int middle = (low + high) / 2;
if(cards[middle] >= target)
high = middle - 1;
else
low = middle + 1;
}
id = high + 1;
if(id != -1)
{
for(int j = i; j > id; j--)
cards[j] = cards[j - 1];
cards[id] = target;
}
cout << "第" << i << "趟排序:" << endl;
for(int i = 0; i < 17; i++)
cout << cards[i] << '\t';
cout << endl;
}
return 0;
}
测试代码2.0结果图: