#include "stdafx.h" #include <iostream> using namespace std; //对有序表做插入排序 //注意序号【0】的数据职责是岗哨,不要存需要排序的数据 void insertSort(int * list, int length) { for (int i=2;i<length;i++)//第一个元素为有序,然后后边依次插入 if(list[i],list[i-1]) { list[0]=list[i];//复制为岗哨 list[i]= list[i-1]; for (int j=i-2; list[0]<list[j];--j)// 逐个检测,符合条件记录后移 { list[j+1]=list[j]; } list[j+1]=list[0];//岗哨复制 } } int main(int argc, char* argv[]) { int list[6] ={-1,2,5,9,7,6}; insertSort(list, 6); for (int i=0;i<6;i++) { cout<<list[i]<<endl; } // printf("Hello World!/n"); return 0; } 这个程序总是不对,排序出来,最后一个是2 ,很奇怪,哪儿错了呢? 原来是if(list[i], list[i-1]) 写错了。 #include "StdAfx.h" #include <iostream> using namespace std; //对有序表做插入排序 //注意序号【0】的数据职责是岗哨,不要存需要排序的数据 void insertSort(int * list, int length) { for(int i=1; i<length; i) { int j = i-1; int t = list[i]; while(j>=0 && list[j]>t) { list[j 1] = list[j]; --j; } list[j 1] = t; } } int main(int argc, char* argv[]) { int list[] ={-1,2,5,9,7,6}; insertSort(list, 6); for (int i=0;i<6;i ) { cout<<list[i]<<endl; } // printf("Hello World!/n"); return 0; } 来自:伟民