📄 shellsort.txt
字号:
//**************************************
//
//INCLUDE files for :ShellSort a string
// array
//**************************************
//
/* +++Date last modified: 05-Jul-1997 */
/*
** Header file for SNIPPETS sorting functions
*/
#ifndef SNIPSORT__H
#define SNIPSORT__H
#include <stddef.h>
#include "dirport.h"
/*
** Prototypes
*/
#ifdef __STDC__
#define strsort _strsort
#endif
void hugesort(void HUGE *basep, unsigned nel,
unsigned width,
int (*comp)(void HUGE *, void HUGE *)); /* Hugesort.C */
void*sortl(void *list, void *(*getnext)(void *),
void (*setnext)(void *, void *),
int (*compare)(void *, void *)); /* Ll_Qsort.C */
void isort(void *base, size_t nmemb, size_t size,
int (*comp)(const void *, const void *));/* Rg_Isort.C */
void qsort(void *, size_t, size_t,
int (*)(const void *, const void *));/* Rg_Qsort.C */
void swap_chars(char *, char *, size_t); /* Rg_Qsort.C */
void quicksort(int v[], unsigned n); /* Rgiqsort.C */
void ssort (void *base, size_t nel, size_t width,
int (*comp)(const void *, const void *));/* Rg_Ssort.C */
void strsort(char **v, unsigned n);/* Strsort.C */
/*
** File: LL_MSORT.C
*/
typedef struct list_struct {
struct list_struct *next;
char *key;
/* other stuff */
} list;
list *lsort (list *p);
#endif /* SNIPSORT__H */
//**************************************
//
// Name: ShellSort a string array
// Description:strsort() -- Shell sort a
// n array of string pointers via strcmp().
// Written in ANSI C and optimized for size
// under Borland TC and BC++.
// By: Bob Stout (republished under Open
// Content License)
//
/* +++Date last modified: 05-Jul-1997 */
/*
** strsort() -- Shell sort an array of string pointers via strcmp()
** Written in ANSI C and optimized for size under Borland TC and BC++.
**
** public domain by Raymond Gardner 12/05/91:-)
** based on a public domain version by Thad Smith 12/05/91,
** based on a public domain version by
** Ray GardnerDenver, CO12/88
*/
#include <string.h>
#include "snipsort.h"
void STRSORT(char **v, unsigned n)
{
register unsigned int gap;
unsigned int i, j;
register char **a;
char **b;
gap = 0;
do
{
gap <<= 1;
} while (++gap < n);
while ((i = (gap >>= 1)) != 0)
{
for ( ; (j = i) < n; i++)
{
a = v + j;
do
{
j -= gap;
b = a;
a -= gap;
if (strcmp(*a, *b) > 0)
{
register char *tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
else break; /* better have this break! */
} while (j >= gap);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -