﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-lzh-随笔分类-数据结构及算法问题</title><link>http://www.cppblog.com/lzh/category/14692.html</link><description>刘政</description><language>zh-cn</language><lastBuildDate>Sat, 09 Apr 2011 07:54:57 GMT</lastBuildDate><pubDate>Sat, 09 Apr 2011 07:54:57 GMT</pubDate><ttl>60</ttl><item><title>杭电1010（DFS，剪枝）</title><link>http://www.cppblog.com/lzh/archive/2011/04/03/DFS.html</link><dc:creator>lzh525</dc:creator><author>lzh525</author><pubDate>Sun, 03 Apr 2011 13:37:00 GMT</pubDate><guid>http://www.cppblog.com/lzh/archive/2011/04/03/DFS.html</guid><wfw:comment>http://www.cppblog.com/lzh/comments/143368.html</wfw:comment><comments>http://www.cppblog.com/lzh/archive/2011/04/03/DFS.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lzh/comments/commentRss/143368.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lzh/services/trackbacks/143368.html</trackback:ping><description><![CDATA[Tempter of the Bone
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21915    Accepted Submission(s): 6011


Problem Description
The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it up, the maze began to shake, and the doggie could feel the ground sinking. He realized that the bone was a trap, and he tried desperately to get out of this maze.

The maze was a rectangle with sizes N by M. There was a door in the maze. At the beginning, the door was closed and it would open at the T-th second for a short period of time (less than 1 second). Therefore the doggie had to arrive at the door on exactly the T-th second. In every second, he could move one block to one of the upper, lower, left and right neighboring blocks. Once he entered a block, the ground of this block would start to sink and disappear in the next second. He could not stay at one block for more than one second, nor could he move into a visited block. Can the poor doggie survive? Please help him.
 

Input
The input consists of multiple test cases. The first line of each test case contains three integers N, M, and T (1 < N, M < 7; 0 < T < 50), which denote the sizes of the maze and the time at which the door will open, respectively. The next N lines give the maze layout, with each line containing M characters. A character is one of the following:

'X': a block of wall, which the doggie cannot enter; 
'S': the start point of the doggie; 
'D': the Door; or
'.': an empty block.

The input is terminated with three 0's. This test case is not to be processed.
 

Output
For each test case, print in one line "YES" if the doggie can survive, or "NO" otherwise.
 

Sample Input
4 4 5
S.X.
..X.
..XD
....
3 4 5
S.X.
..X.
...D
0 0 0
 

Sample Output
NO
YES


/*刚看到提示觉得就是一个普通的棋盘搜索的问题，因为以前做过所以马上开始敲代码，到后来发现连测试数据都过不了，再后来就是WA。后面记过调试才发现循环搜索遍历后没复原。后来终于自己的测试数据都过了，提交后才悲剧地发现TLE。看了很久之后觉得到网上找答案了，原来是一个剪枝没处理 。铜鼓这个题又又发现了很多问题
1.基本的算法要熟悉弄通，例如此题就是一个典型的DFS，我很久前学过但没怎么用，没很好的掌握。开始做时完全按照自己的思路，虽然写出来了但效率不高
2.算法效率越见重要，最后还是一个数学问题，多总结
*/
//下面是自己盲目写的算法，虽然册数数据过了但超时
/*#include<iostream>
#include<math.h>
using namespace std;
#define N 8
char maze[N][N];
bool flag[N][N];
int direction[4][2]={0,1,1,0,0,-1,-1,0};
bool sign;
int num;

void init()
{
	int i,j;
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
		{
			flag[i][j]=false;
		}
}

void search(int r,int c,int s,int times)
{
    int i,x,y,t;
	for(i=0;i<4;i++)
	{
                            t=times;          //不能直接用times,回溯...
		x=r+direction[i][0];
		y=c+direction[i][1];
		if(!flag[x][y])
			continue;
		t++;
		if(t>=s)
		{
			if(maze[x][y]=='D')
			{
				sign=true;
				return ;
			}
			else
				continue;
		}
                           else
		{
			if(maze[x][y]=='D')
				continue;
			else
			{
				cout<<x<<","<<y<<endl;
				flag[x][y]=false;      //标记已走过的点
				search(x,y,s,t);
				flag[x][y]=true;          ////////////注意遍历后还原
				if(sign)
					return ;
			}
		}
		
	}
}

int main()
{
	int row,column,limit,i,j,times,Ss,Se;
	while(cin>>row>>column>>limit)
	{
		getchar();
		//	if(!(row|column|limit))   //全0则输入结束
		//	break;
		if(0==row&&0==column&&0==limit)
			return 0;
		init();
		for(i=1;i<=row;i++)
		{
			for(j=1;j<=column;j++)
			{
				cin>>maze[i][j];
				if(maze[i][j]=='S')
				{
					Ss=i;
					Se=j;
				}
				if(maze[i][j]!='X')
				{
					flag[i][j]=true;
					num++;
				}
			}
			getchar();
		}
		times=0;
		num=0;
		sign=false;
		flag[Ss][Se]=false;
        if(num-1>=limit)         //限制的时间小于等于所有的街区数时才有可能有解
		search(Ss,Se,limit,times);
		if(sign)
			cout<<"YES\n";
		else
			cout<<"NO\n";
	}
	return 0;
}
*/


//之后经过剪枝后的代码 AC
#include<iostream>
#include<math.h>
using namespace std;
#define N 8
int ex,ey;             //出口位置
int secs;              //出口开启时间
bool sign;             //找到出口的标志
bool flag[N][N];       //是否遍历过的标记数组
char maze[N][N];
int direction[4][2]={0,1,1,0,0,-1,-1,0};

void init()
{
   int i,j;
   for(i=0;i<N;i++)
	   for(j=0;j<N;j++)
		   flag[i][j]=false;
}

void dfs(int m,int n,int start)
{
    int i,x,y,time;
   if((m==ex)&&(n==ey)&&(start==secs))    //正确的时刻找到出口
   {
	   sign=true;
	   return ;
   }
   time=(secs-start)-(abs(m-ex)+abs(n-ey)); 
     if(time<0 || time%2!=0)              //剪掉奇数枝
       return;
/*某一时刻，狗到达某一位置(m,n)，那么到达终点至少还要abs(m-ex)+abs(n-ey) 因为不能在格子上停留，且不能
重复走过的格子,所以要求剩余时间和所需时间同奇,或同偶,所以他们相减应该得到偶数,如果得到奇数,那么可以
直接判断没办法到达了,所以if中式子是判断剩余的时间是否为偶数,为奇数就不能到达了*/
   for(i=0;i<4;i++)
   {
      x=m+direction[i][0];
      y=n+direction[i][1];
	  if(!flag[x][y])
		  continue;
	  else
	  {
	     flag[x][y]=false;
		 dfs(x,y,start+1);
		 flag[x][y]=true;    //遍历后还原
	  }
	  if(sign)
		  break;
   }
   return ;
}

int main()
{
	int x0,y0,i,j,row,column,nums;
	while(cin>>row>>column>>secs)
	{
		getchar();        //吸收回车
		if(!(row|column|secs))   //全0则输入结束
			break;
		init();
		nums=0;
		sign=false;
		for(i=1;i<=row;i++)
		{
			for(j=1;j<=column;j++)
			{
				cin>>maze[i][j];
				if(maze[i][j]=='S')
				{
					x0=i;
					y0=j;
				}
				else if(maze[i][j]=='D')
				{
					ex=i;
					ey=j;
					flag[i][j]=true;
				}
				else if(maze[i][j]=='X')
					nums++;
                else
				  flag[i][j]=true;
			}
			getchar();  //吸收回车
		} 
		if(row*column-nums-1>=secs)
			dfs(x0,y0,0);
		if(sign)
			cout<<"YES\n";
		else
			cout<<"NO\n";
	}
	return 0;
} <img src ="http://www.cppblog.com/lzh/aggbug/143368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lzh/" target="_blank">lzh525</a> 2011-04-03 21:37 <a href="http://www.cppblog.com/lzh/archive/2011/04/03/DFS.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMP算法（字符串模式匹配）</title><link>http://www.cppblog.com/lzh/archive/2010/11/12/kmp.html</link><dc:creator>lzh525</dc:creator><author>lzh525</author><pubDate>Fri, 12 Nov 2010 02:29:00 GMT</pubDate><guid>http://www.cppblog.com/lzh/archive/2010/11/12/kmp.html</guid><wfw:comment>http://www.cppblog.com/lzh/comments/133401.html</wfw:comment><comments>http://www.cppblog.com/lzh/archive/2010/11/12/kmp.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lzh/comments/commentRss/133401.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lzh/services/trackbacks/133401.html</trackback:ping><description><![CDATA[<div>KMP算法是一种高效的模式匹配算法，复杂度可以达到O(m+n)，而普通模式匹配算法的复杂度为O(m*n)。<br><br>普通模式匹配算法<br><br>　　从主串的第一个字符（或者给定的第pos个字符）开始和子串的第一个字符开始比较，若相等，则继续比较后面的字符。若不相等，则从主串本次开始比较的字符的下一个字符开始，与子串的第一个字符进行比较（即主串需要回退到本次比较开始字符的下一字符，模式串回退到首字符，主串与子串都需要回退）。<br>　　匹配成功的标志：比较到子串的&#8217;\0&#8217;<br>　　匹配失败的标志：比较到主串的&#8217;\0&#8217;，且此时子串的比较位不等于&#8217;\0&#8217;。<br>　　算法复杂度：O(m*n)<br><br>KMP算法<br><br>KMP算法的改进思路<br>　　在普通匹配算法中子串与模式串都需要回溯，但这些回溯不是必要的。因为当某一位发生失配时，可以根据已匹配的结果进行判断。该算法问题可以理解为，当模式串中的第k位与主串的第i位比较时发生不匹配时，需要将模式串向右滑动到哪里继续与主串的第i位进行比较？避免了不必要的主串回溯，减少了模式串回溯的位数，从而使算法复杂度提升到O(m+n)。<br><br>KMP算法的实现思路<br>　　从主串的第一个字符（或者给定的第pos个字符）开始和子串的第一个字符开始比较，若相等，则继续比较后面的字符。若不相等，则将模式串右移至合适的位置，找出模式串中合适的第k位与主串中发生不等的位进行对齐比较。算法继续。<br>　　模式串与主串对齐继续比较的第k位必须满足其前k-1位与主串发生失配位置的前k-1位匹配，且该k-1位字串必须是最长的字串（即不存在k&#8217;&gt;k，使模式串中的前k&#8217;-1位与主串发生失配位置的前k&#8217;-1位匹配，这是为了保证不漏过可以匹配的串）。<br>　　该算法中的主程序同普通的匹配算法类似，区别在于当发生不匹配时，主串指针不需要回退（不动），将模式串右移到合适的位置继续进行比较。当模式串移动到第一位（下标为0）仍然不等时，主串指针右移一位。该算法的关键是模式串next[]的取得。<br>　　匹配成功的标志：比较到子串的&#8217;\0&#8217;<br>　　匹配失败的标志：比较到主串的&#8217;\0&#8217;，且此时子串的比较位不等于&#8217;\0&#8217;。<br><br>next[]数组的获得<br>　　next[]数组记录了当模式串第j位发生失配时，模式串需要移动到第k位，使第k位与主串发生失配的位对齐继续比较（next[j]=k）。next[]数组使用递推实现，假设next[j]=k已经获得，则从next[j]开始推next[j+1]。具体算法如下。<br>　　假设next[j]=k（第j位及之前的next[]值已经求得，k&lt;j），当模式串第j位发生失配时，模式串需要移动到第k位，使第k位与主串发生失配的位对齐继续比较。这说明：除了第k位，其前面的k-1位与主串发生失培的前k-1位已经匹配。（因为当第p[k]位失配时，p[1]p[2]&#8230;p[k-1]已经等于s[i-k+1]s[i-k+2]&#8230;s[i-1]）<br>　　而同时由于：p[j-k+1]p[j-k+2]&#8230;p[j-1]=s[i-k+1]s[i-k+2]&#8230;s[i-1]<br>　　所以：p[1]p[2]&#8230;p[k-1]= p[j-k+1]p[j-k+2]&#8230;p[j-1]<br><br>情况1：<br>　　若p[k]=p[j]，即p[next[j]]=p[j]，那么：p[1]p[2]&#8230;p[k-1]p[k]= p[j-k+1]p[j-k+2]&#8230;p[j-1]p[j]，则根据定义：next[j+1]=k+1=next[j]+1<br><br>情况2：<br>　　若p[k]!=p[j]，即p[1]p[2]&#8230;p[k-1]p[k]!= p[j-k+1]p[j-k+2]&#8230;p[j-1]p[j]，即p[k]与p[j]发生不等。把p[k]为模式串，即模式串第k位发生失配，根据KMP算法的基本思路，当模式串第k位发生失配时，模式串应移动到第next[k]=k&#8217;位与主串进行比较。此时：p[1]p[2]&#8230;p[k&#8217;-1]= p[j-k&#8217;+1]p[j-k&#8217;+2]&#8230;p[j-1]。然后再比较p[k&#8217;]与p[j]，若相等，同情况1：next[j+1]=k&#8217;+1= next[k]+1；若不相等，返回到情况2的头进行比较。（两种判断均可以归入情况1或者情况2，所以可以进行循环）<br><br>情况3：<br>　　若next[k]=-1，即发生失配元素的前一个元素与第一个元素a[0]仍然不等，该应使该失配元素直接与第一个元素比较，next[j+1]=0。（该情况可与第一种情况合并（因为next[0]=-1））<br><br>简单得说：<br>　　从next[j]=k开始比较，首先将k与自身对齐比较（找可以与j对齐比较的最长子串），如果相等，则p[k]=p[j]，满足情况1。若不相同，即模式串第k位发生失配，移动到k'=next[k]位继续进行比较。返回情况1或者2。如果next[k]=-1（仅第1位的next[0]的值为-1），说明j+1的前一位j与第一位比较仍然不等，那应该让第j+1位直接与第1位（下标为0）进行比较。<br>　　next[k+1]的计算依赖于next[k]，next[k+1]仅有一种方式获得，即第k+1字符的前面k个字符完全匹配（或者前一元素与第一个元素仍然不匹配）。而next[k]是已经计算的，即next[k]可以保证第k字符的前面k-1个字符（除了第k个字符）完全匹配，而且该字串是最长字串。因为只需比较第k个字符是否匹配。匹配成功即情况一，匹配失败则继续寻找next[next[k]]。<br>　　编程时，每次进行计算next[j+1]时，必须保证j与k呈对应关系，即每新一次计算前，next[j]=k（next[j+1]=k+1，因而也可以写成next[++j]=++k）。<br><br>KMP算法的再改进<br><br>　　当第k+1位发生失配时，根据原算法，可以找到一个子串，与之匹配。此时，next[j+1]=k+1<br>但若 T[j+1]= T[next[j+1]]=T[k+1]，则当T[j+1]发生失配时，程序会使回到第next[j+1](=k+1)位，与T[j+1]所对应的主串字符进行比较。但由于主串字符已经不等于T[j+1]，因而也必然不等于T[next[j+1]]，因而此次比较必然失败。<br>　　改进：当T[j+1]= T[next[j+1]]=T[k+1]时，next[j+1]= next[next[j+1]]=next[k+1]，从而避免不必要的重复比较。<br><br>附：<br>普通模式匹配算法代码：<br>int mystrstr(char* S, char* T, int pos)<br>{<br>&nbsp;&nbsp; &nbsp;int i=pos; //设置主串的指针位置（初始位置为给定的开始位置）<br>&nbsp;&nbsp; &nbsp;int j=0; //设置子串的指针位置（初始位置为子串的首元素）<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;while (S[i]!='\0')<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (T[j]=='\0') {return (i-j+1);} //比较到子串的&#8217;\0&#8217;，匹配成功<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (S[i]==T[j]) {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//子串与主串在该位的匹配值相等，则继续比较下一字符<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else { //若不相同<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i=i-j+1; //主串回退到本次比较开始字符的下一字符&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;j=0; //模式串回退到首字符<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;return 0; 比较到主串的&#8217;\0&#8217;，且此时子串的比较位不等于&#8217;\0&#8217;，匹配失败<br>}<br><br>KMP主程序代码：<br>int mystrstr(char* S, char* T, int pos, const int* next)<br>{<br>&nbsp;&nbsp; &nbsp;int i=pos; //主串指针&nbsp;<br>&nbsp;&nbsp; &nbsp;int j=0; //模式串指针&nbsp;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;while (S[i]!='\0') //当主串指针所指字符不为'\0'时,继续比较&nbsp;<br>&nbsp;&nbsp; &nbsp;{ &nbsp; &nbsp;&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (j==-1) {i++;j++;}<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 当头元素仍然不匹配时,j=-1,此时j指针清0指向模式串的首元素, i指针指下主串的下一元素&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (T[j]=='\0') {return (i-j+1);}<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 当模式串指针所指元素为'\0'时,匹配完成,返回位置&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (S[i]==T[j]) {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //当模式串指针与主串指针所指元素相同时,两指针都相加.比较下一元素&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;j=next[j];<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//若模式串指针与主串指针所指内容不同时,模式串指针回退指到next[j]位置(第j位发生失配)&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;return 0;<br>}<br><br>生成next[]数组代码<br>//该程序用next[i]来推测next[i+1]<br>//每次比较开始时next[i]=k,每次比较开始前i与k成对应关系&nbsp;<br>void GetNext (char* T,int* next)<br>{<br>&nbsp;&nbsp; &nbsp; int j=0;<br>&nbsp;&nbsp; &nbsp; int k=-1; //k为当第j位发生失配时,需要移动到的下一次进行比较的位(第k位) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; next[0]=-1;<br>&nbsp;&nbsp; &nbsp; //给定初始值,当比较到第一个元素(下标为0)仍然不等时,k的值为-1&nbsp;<br>&nbsp;&nbsp; &nbsp;&nbsp;<br>&nbsp;&nbsp; &nbsp; while (j&lt;strlen(T)) //j的大小有strlen(T)个,下标从0开始&nbsp;<br>&nbsp;&nbsp; &nbsp; {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (k==-1||T[k]==T[j])<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//next[j]=k的定义为: t[0]...t[k-1]=t[j-k+1]...t[j-1]&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//当T[k]=T[j]时,即T[next[j]]=T[j]时,T[1]...T[k]=T[j-k+1]...T[j],此时next[j+1]=next[j]+1=k+1,即可以求出next[j+1]&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//当k=1时,即j+1的前一个元素与模式串的首元素相比,仍然不同,则应该让第j+1个元素直接与首元素进行比较&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;next[j+1]=k+1;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;j++;&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k++; //k=next[j+1]=k+1,不能写k=next[j+1],因为上面一句j已经变化过了<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//next[j+1]=next[j]+1=k+1,即j+1与k+1是成对出现的&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//下次比较开始前,j与k必须成对应关系出现, 满足这个式子：next[j+1]=k+1<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k=next[k];<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //如果不等,可以理解为模式串的第k(next[j])位发生不匹配<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //则寻找到第next[k]位(保证k之前的元素匹配)继续进行比较<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp;&nbsp; &nbsp; }<br>}<br><br>生成KMP改进算法的next[]数组代码<br>void GetNext (char* T,int* next)<br>{<br>&nbsp;&nbsp; &nbsp; int j=0;<br>&nbsp;&nbsp; &nbsp; int k=-1;<br><br>&nbsp;&nbsp; &nbsp; next[0]=-1;<br>&nbsp;&nbsp; &nbsp; // next[j]=k<br>&nbsp;&nbsp; &nbsp;&nbsp;<br>&nbsp;&nbsp; &nbsp; while (j&lt;strlen(T))<br>&nbsp;&nbsp; &nbsp; {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (k==-1||T[k]==T[j])<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;next[j+1]=k+1;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (T[j+1]==T[next[j+1]]) {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; next[j+1]=next[next[j+1]];<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//就多了这段，当T[j+1]与T[next[j+1]]相等时，使next[j+1]=next[next[j+1]]<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;j++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k=next[k];<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp;&nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br>}<br><br><br>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/ultrasurf/archive/2007/11/08/1873589.aspx</div>
<img src ="http://www.cppblog.com/lzh/aggbug/133401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lzh/" target="_blank">lzh525</a> 2010-11-12 10:29 <a href="http://www.cppblog.com/lzh/archive/2010/11/12/kmp.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我总结的常见排序方法（c语言实现）</title><link>http://www.cppblog.com/lzh/archive/2010/08/26/sort.html</link><dc:creator>lzh525</dc:creator><author>lzh525</author><pubDate>Thu, 26 Aug 2010 12:43:00 GMT</pubDate><guid>http://www.cppblog.com/lzh/archive/2010/08/26/sort.html</guid><wfw:comment>http://www.cppblog.com/lzh/comments/124876.html</wfw:comment><comments>http://www.cppblog.com/lzh/archive/2010/08/26/sort.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lzh/comments/commentRss/124876.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lzh/services/trackbacks/124876.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">malloc.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;cmp(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">sort函数的比较函数，若将"&lt;"改为"&gt;"则为降序排列</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #008000"><img id=Codehighlighter1_114_130_Open_Image onclick="this.style.display='none'; Codehighlighter1_114_130_Open_Text.style.display='none'; Codehighlighter1_114_130_Closed_Image.style.display='inline'; Codehighlighter1_114_130_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_114_130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_114_130_Closed_Text.style.display='none'; Codehighlighter1_114_130_Open_Image.style.display='inline'; Codehighlighter1_114_130_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_114_130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_114_130_Open_Text><span style="COLOR: #000000">{<br><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">b;<br><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;comp(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">C语言qsort的升序排序函数，将return语句的a,b互换则为降序排序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #008000"><img id=Codehighlighter1_208_238_Open_Image onclick="this.style.display='none'; Codehighlighter1_208_238_Open_Text.style.display='none'; Codehighlighter1_208_238_Closed_Image.style.display='inline'; Codehighlighter1_208_238_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_208_238_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_208_238_Closed_Text.style.display='none'; Codehighlighter1_208_238_Open_Image.style.display='inline'; Codehighlighter1_208_238_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_208_238_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_208_238_Open_Text><span style="COLOR: #000000">{<br><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)a</span><span style="COLOR: #000000">-*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)b;<br><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;sel_sort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">选择排序，分为有序，无序两部分。每次迭代中选择无序部分的最小元素，并移动到有序部分的尾部<img src="http://www.cppblog.com/Images/dot.gif"><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #008000"><img id=Codehighlighter1_321_449_Open_Image onclick="this.style.display='none'; Codehighlighter1_321_449_Open_Text.style.display='none'; Codehighlighter1_321_449_Closed_Image.style.display='inline'; Codehighlighter1_321_449_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_321_449_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_321_449_Closed_Text.style.display='none'; Codehighlighter1_321_449_Open_Image.style.display='inline'; Codehighlighter1_321_449_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_321_449_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_321_449_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;min;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id=Codehighlighter1_362_447_Open_Image onclick="this.style.display='none'; Codehighlighter1_362_447_Open_Text.style.display='none'; Codehighlighter1_362_447_Closed_Image.style.display='inline'; Codehighlighter1_362_447_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_362_447_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_362_447_Closed_Text.style.display='none'; Codehighlighter1_362_447_Open_Image.style.display='inline'; Codehighlighter1_362_447_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_362_447_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_362_447_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s[j]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">s[min])<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(s[i],s[min]);<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;insert_sort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">插入排序，分为有序，无序两部分。每次迭代中无序部分的下一个元素被插入到有序部分的何时位置。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img id=Codehighlighter1_530_648_Open_Image onclick="this.style.display='none'; Codehighlighter1_530_648_Open_Text.style.display='none'; Codehighlighter1_530_648_Closed_Image.style.display='inline'; Codehighlighter1_530_648_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_530_648_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_530_648_Closed_Text.style.display='none'; Codehighlighter1_530_648_Open_Image.style.display='inline'; Codehighlighter1_530_648_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_530_648_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_530_648_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img id=Codehighlighter1_568_646_Open_Image onclick="this.style.display='none'; Codehighlighter1_568_646_Open_Text.style.display='none'; Codehighlighter1_568_646_Closed_Image.style.display='inline'; Codehighlighter1_568_646_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_568_646_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_568_646_Closed_Text.style.display='none'; Codehighlighter1_568_646_Open_Image.style.display='inline'; Codehighlighter1_568_646_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_568_646_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_568_646_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">((j</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">(s[j]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">s[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]))<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id=Codehighlighter1_609_643_Open_Image onclick="this.style.display='none'; Codehighlighter1_609_643_Open_Text.style.display='none'; Codehighlighter1_609_643_Closed_Image.style.display='inline'; Codehighlighter1_609_643_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_609_643_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_609_643_Closed_Text.style.display='none'; Codehighlighter1_609_643_Open_Image.style.display='inline'; Codehighlighter1_609_643_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_609_643_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_609_643_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(s[j],s[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;quick_sort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;left,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;right)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">快速排序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #008000"><img id=Codehighlighter1_700_940_Open_Image onclick="this.style.display='none'; Codehighlighter1_700_940_Open_Text.style.display='none'; Codehighlighter1_700_940_Closed_Image.style.display='inline'; Codehighlighter1_700_940_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_700_940_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_700_940_Closed_Text.style.display='none'; Codehighlighter1_700_940_Open_Image.style.display='inline'; Codehighlighter1_700_940_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_700_940_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_700_940_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">right,l</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left,p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s[right];<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(l</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">r)<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img id=Codehighlighter1_747_829_Open_Image onclick="this.style.display='none'; Codehighlighter1_747_829_Open_Text.style.display='none'; Codehighlighter1_747_829_Closed_Image.style.display='inline'; Codehighlighter1_747_829_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_747_829_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_747_829_Closed_Text.style.display='none'; Codehighlighter1_747_829_Open_Image.style.display='inline'; Codehighlighter1_747_829_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_747_829_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_747_829_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(s[l],s[r]);<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(l</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">s[r]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">p)&nbsp;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(l</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">s[l]</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">p)<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;swap(s[left],s[r]);<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(left</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quick_sort(s,left,r</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(right</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quick_sort(s,r</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,right);<br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img id=Codehighlighter1_954_1381_Open_Image onclick="this.style.display='none'; Codehighlighter1_954_1381_Open_Text.style.display='none'; Codehighlighter1_954_1381_Closed_Image.style.display='inline'; Codehighlighter1_954_1381_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_954_1381_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_954_1381_Closed_Text.style.display='none'; Codehighlighter1_954_1381_Open_Image.style.display='inline'; Codehighlighter1_954_1381_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_954_1381_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_954_1381_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,n;<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a;<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">n)<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img id=Codehighlighter1_991_1344_Open_Image onclick="this.style.display='none'; Codehighlighter1_991_1344_Open_Text.style.display='none'; Codehighlighter1_991_1344_Closed_Image.style.display='inline'; Codehighlighter1_991_1344_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_991_1344_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_991_1344_Closed_Text.style.display='none'; Codehighlighter1_991_1344_Open_Image.style.display='inline'; Codehighlighter1_991_1344_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_991_1344_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_991_1344_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">a=(int&nbsp;*)malloc(n*sizeof(int));</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">68</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[n];<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">a[i];<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel_sort(a,n);<br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">insert_sort(a,n);<br></span><span style="COLOR: #008080">73</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">quick_sort(a,0,n-1);<br></span><span style="COLOR: #008080">74</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">sort(a,a+n,cmp);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">c++排序库函数<br></span><span style="COLOR: #008080">75</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">qsort(a,n,sizeof(int),comp);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">c排序库函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">76</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img id=Codehighlighter1_1263_1341_Open_Image onclick="this.style.display='none'; Codehighlighter1_1263_1341_Open_Text.style.display='none'; Codehighlighter1_1263_1341_Closed_Image.style.display='inline'; Codehighlighter1_1263_1341_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1263_1341_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1263_1341_Closed_Text.style.display='none'; Codehighlighter1_1263_1341_Open_Image.style.display='inline'; Codehighlighter1_1263_1341_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1263_1341_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1263_1341_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">a[i];<br></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">82</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br></span><span style="COLOR: #008080">83</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">84</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">85</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">free(a);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">86</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;delete(a);<br></span><span style="COLOR: #008080">87</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">88</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/lzh/aggbug/124876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lzh/" target="_blank">lzh525</a> 2010-08-26 20:43 <a href="http://www.cppblog.com/lzh/archive/2010/08/26/sort.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>八皇后问题（回溯法）</title><link>http://www.cppblog.com/lzh/archive/2010/08/22/huisu2.html</link><dc:creator>lzh525</dc:creator><author>lzh525</author><pubDate>Sun, 22 Aug 2010 13:19:00 GMT</pubDate><guid>http://www.cppblog.com/lzh/archive/2010/08/22/huisu2.html</guid><wfw:comment>http://www.cppblog.com/lzh/comments/124318.html</wfw:comment><comments>http://www.cppblog.com/lzh/archive/2010/08/22/huisu2.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lzh/comments/commentRss/124318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lzh/services/trackbacks/124318.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1 /* 2  3   N皇后问题算法思想 4    5     由于这是一个平面上棋子布局处理问题，因此，我们可以将问题看成是一个二维数组问题。给八个皇后分别编号为1,2，&#8230;,8，其中第i个皇后放置在第i行上，并这就解决了不同皇后分别摆放在不同列的问题，这样又可以把问题简化为一个一维数组的问题，假设用一维数组arr来存放皇后所放置的列，对于第i个皇后，假设它存放在ar...&nbsp;&nbsp;<a href='http://www.cppblog.com/lzh/archive/2010/08/22/huisu2.html'>阅读全文</a><img src ="http://www.cppblog.com/lzh/aggbug/124318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lzh/" target="_blank">lzh525</a> 2010-08-22 21:19 <a href="http://www.cppblog.com/lzh/archive/2010/08/22/huisu2.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回溯法之应用---生成全排列，子集</title><link>http://www.cppblog.com/lzh/archive/2010/08/22/backtrack.html</link><dc:creator>lzh525</dc:creator><author>lzh525</author><pubDate>Sun, 22 Aug 2010 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/lzh/archive/2010/08/22/backtrack.html</guid><wfw:comment>http://www.cppblog.com/lzh/comments/124266.html</wfw:comment><comments>http://www.cppblog.com/lzh/archive/2010/08/22/backtrack.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lzh/comments/commentRss/124266.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lzh/services/trackbacks/124266.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 全排列的生成1 #include&lt;iostream&gt; 2 using namespace std; 3  4 const int MAX=100; 5 int a[MAX]; 6 bool finished=false;//是否找到了所要全部求的解 7  8 void process(int *a,int n) 9 {10     int i,fir...&nbsp;&nbsp;<a href='http://www.cppblog.com/lzh/archive/2010/08/22/backtrack.html'>阅读全文</a><img src ="http://www.cppblog.com/lzh/aggbug/124266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lzh/" target="_blank">lzh525</a> 2010-08-22 10:58 <a href="http://www.cppblog.com/lzh/archive/2010/08/22/backtrack.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>