A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C_Tutorial%2FString%2FString_Sort</id>
		<title>C Tutorial/String/String Sort - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C_Tutorial%2FString%2FString_Sort"/>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C_Tutorial/String/String_Sort&amp;action=history"/>
		<updated>2026-04-18T07:08:41Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C_Tutorial/String/String_Sort&amp;diff=3246&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C_Tutorial/String/String_Sort&amp;diff=3246&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C_Tutorial/String/String_Sort&amp;diff=3247&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C_Tutorial/String/String_Sort&amp;diff=3247&amp;oldid=prev"/>
				<updated>2010-05-25T10:32:04Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Sorting Strings==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
  /* A Quicksort for strings. */&lt;br /&gt;
  void quick_string(char items[][10], int count)&lt;br /&gt;
  {&lt;br /&gt;
    qs_string(items, 0, count-1);&lt;br /&gt;
  }&lt;br /&gt;
  int qs_string(char items[][10], int left, int right)&lt;br /&gt;
  {&lt;br /&gt;
    register int i, j;&lt;br /&gt;
    char *x;&lt;br /&gt;
    char temp[10];&lt;br /&gt;
    i = left; j = right;&lt;br /&gt;
    x = items[(left+right)/2];&lt;br /&gt;
    do {&lt;br /&gt;
      while((strcmp(items[i],x) &amp;lt; 0) &amp;amp;&amp;amp; (i &amp;lt; right)) i++;&lt;br /&gt;
      while((strcmp(items[j],x) &amp;gt; 0) &amp;amp;&amp;amp; (j &amp;gt; left)) j--;&lt;br /&gt;
      if(i &amp;lt;= j) {&lt;br /&gt;
        strcpy(temp, items[i]);&lt;br /&gt;
        strcpy(items[i], items[j]);&lt;br /&gt;
        strcpy(items[j], temp);&lt;br /&gt;
        i++; j--;&lt;br /&gt;
     }&lt;br /&gt;
    } while(i &amp;lt;= j);&lt;br /&gt;
    if(left &amp;lt; j) qs_string(items, left, j);&lt;br /&gt;
    if(i &amp;lt; right) qs_string(items, i, right);&lt;br /&gt;
  }&lt;br /&gt;
  char str[][10] = { &amp;quot;one&amp;quot;,&lt;br /&gt;
                     &amp;quot;two&amp;quot;,&lt;br /&gt;
                     &amp;quot;three&amp;quot;,&lt;br /&gt;
                     &amp;quot;four&amp;quot;&lt;br /&gt;
                   };&lt;br /&gt;
  int main(void)&lt;br /&gt;
  {&lt;br /&gt;
    int i;&lt;br /&gt;
    quick_string(str, 4);&lt;br /&gt;
    for(i=0; i&amp;lt;4; i++) printf(&amp;quot;%s &amp;quot;, str[i]);&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==The functional approach to string sorting==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;/*&lt;br /&gt;
Beginning C: From Novice to Professional, Fourth Edition&lt;br /&gt;
By Ivor Horton&lt;br /&gt;
ISBN: 1-59059-735-4&lt;br /&gt;
640 pp.&lt;br /&gt;
Published: Oct 2006&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdbool.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
bool str_in(const char **);            /* Function prototype for str_in    */&lt;br /&gt;
void str_sort(const char *[], int);    /* Function prototype for str_sort  */&lt;br /&gt;
void swap( void **p1,  void **p2);     /* Swap two pointers                */&lt;br /&gt;
void str_out(char *[], int);           /* Function prototype for str_out   */&lt;br /&gt;
const size_t BUFFER_LEN =  256;&lt;br /&gt;
const size_t NUM_P = 50;&lt;br /&gt;
/* Function main - execution starts here */&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  char *pS[NUM_P];                     /* Array of string pointers         */&lt;br /&gt;
  int count = 0;                       /* Number of strings read           */&lt;br /&gt;
  printf(&amp;quot;\nEnter successive lines, pressing Enter at the end of&amp;quot;&lt;br /&gt;
                         &amp;quot; each line.\nJust press Enter to end.\n&amp;quot;);&lt;br /&gt;
  for(count = 0; count &amp;lt; NUM_P ; count++)        /* Max of NUM_P strings   */&lt;br /&gt;
    if(!str_in(&amp;amp;pS[count]))                      /* Read a string          */&lt;br /&gt;
      break;                                     /* Stop input on 0 return */&lt;br /&gt;
  str_sort( pS, count);                          /* Sort strings           */&lt;br /&gt;
  str_out( pS, count);                           /* Output strings         */&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
/*******************************************************&lt;br /&gt;
 *      String input routine                           *&lt;br /&gt;
 *  Argument is a pointer to a pointer to a constant   *&lt;br /&gt;
 *  string which is const char**                       *&lt;br /&gt;
 *  Returns false for empty string and returns true    *&lt;br /&gt;
 *  otherwise. If no memory is obtained or if there    *&lt;br /&gt;
 *  is an error reading from the keyboard, the program *&lt;br /&gt;
 *  is terminated by calling exit().                   *&lt;br /&gt;
 *******************************************************/&lt;br /&gt;
bool str_in(const char **pString)&lt;br /&gt;
{&lt;br /&gt;
  char buffer[BUFFER_LEN];            /* Space to store input string  */&lt;br /&gt;
  if(gets(buffer) == NULL )           /* NULL returned from gets()?   */&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;\nError reading string.\n&amp;quot;);&lt;br /&gt;
    exit(1);                          /* Error on input so exit       */&lt;br /&gt;
  }&lt;br /&gt;
  if(buffer[0] == &amp;quot;\0&amp;quot;)               /* Empty string read?           */&lt;br /&gt;
    return false;&lt;br /&gt;
  *pString = (char*)malloc(strlen(buffer) + 1);&lt;br /&gt;
  if(*pString == NULL)                /* Check memory allocation      */&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;\nOut of memory.&amp;quot;);&lt;br /&gt;
    exit(1);                          /* No memory allocated so exit  */&lt;br /&gt;
  }&lt;br /&gt;
  strcpy(*pString, buffer);           /* Copy string read to argument */&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
/****************************************************&lt;br /&gt;
 *      String sort routine                         *&lt;br /&gt;
 * First argument is array of pointers to strings   *&lt;br /&gt;
 * which is of type char*[].                        *&lt;br /&gt;
 * Second argument is the number of elements in the *&lt;br /&gt;
 * pointer array - i.e. the number of strings       *&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
void str_sort(const char *p[], int n)&lt;br /&gt;
{&lt;br /&gt;
  char *pTemp = NULL;                 /* Temporary pointer               */&lt;br /&gt;
  bool sorted = false;                /* Strings sorted indicator        */&lt;br /&gt;
  while(!sorted)                      /* Loop until there are no swaps   */&lt;br /&gt;
  {&lt;br /&gt;
    sorted = true;                    /* Initialize to indicate no swaps */&lt;br /&gt;
    for(int i = 0 ; i&amp;lt;n-1 ; i++ )&lt;br /&gt;
      if(strcmp(p[i], p[i + 1]) &amp;gt; 0)&lt;br /&gt;
      {&lt;br /&gt;
        sorted = false;               /* indicate we are out of order    */&lt;br /&gt;
        swap(&amp;amp;p[i], &amp;amp;p[i+1]);         /* Swap the pointers               */&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/****************************************************&lt;br /&gt;
 *      String output routine                       *&lt;br /&gt;
 * First argument is an array of pointers to        *&lt;br /&gt;
 * strings which is the same as char**              *&lt;br /&gt;
 * The second argument is a count of the number of  *&lt;br /&gt;
 * pointers in the array i.e. the number of strings *&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
void str_out(char *p[] , int n)&lt;br /&gt;
{&lt;br /&gt;
  printf(&amp;quot;\nYour input sorted in order is:\n\n&amp;quot;);&lt;br /&gt;
  for (int i = 0 ; i&amp;lt;n ; i++)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;%s\n&amp;quot;, p[i]);             /* Display a string           */&lt;br /&gt;
    free(p[i]);                       /* Free memory for the string */&lt;br /&gt;
    p[i] = NULL;&lt;br /&gt;
  }&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
/******************************************&lt;br /&gt;
*      Swap two pointers                  *&lt;br /&gt;
* The arguments are type pointer to void* *&lt;br /&gt;
* so pointers can be any type*.           *&lt;br /&gt;
*******************************************/&lt;br /&gt;
void swap( void **p1,  void **p2)&lt;br /&gt;
{&lt;br /&gt;
  void *pt = *p1;&lt;br /&gt;
  *p1 = *p2;&lt;br /&gt;
  *p2 = pt;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Enter successive lines, pressing Enter at the end of each line.&lt;br /&gt;
Just press Enter to end.&lt;br /&gt;
a&lt;br /&gt;
s&lt;br /&gt;
d&lt;br /&gt;
s&lt;br /&gt;
s&lt;br /&gt;
s&lt;br /&gt;
d&lt;br /&gt;
s&lt;br /&gt;
d&lt;br /&gt;
sd&lt;br /&gt;
sd&lt;br /&gt;
sd&lt;br /&gt;
&lt;br /&gt;
Your input sorted in order is:&lt;br /&gt;
a&lt;br /&gt;
d&lt;br /&gt;
d&lt;br /&gt;
d&lt;br /&gt;
s&lt;br /&gt;
s&lt;br /&gt;
s&lt;br /&gt;
s&lt;br /&gt;
s&lt;br /&gt;
sd&lt;br /&gt;
sd&lt;br /&gt;
sd&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>