`
xiang37
  • 浏览: 430788 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

字符串中字符的快速排序<通用>

阅读更多

 

- (NSString *)reorderString:(NSString *)originalStr{
	
	int length = [originalStr length];
	int sizeChar;
	if (length < 12) {
		sizeChar = length;
	}
	else {
		sizeChar = length;
	}


	unichar wordChar;
	char *wordsChar = (char *)malloc(sizeof(char)*length);
	//char *wordsUnichar;
	for (int i = 1; i <= length; i++) {
		wordChar = [originalStr characterAtIndex:(i-1)];
		wordsChar[i] = wordChar;
	}
	
	quickSort(wordsChar, 0, length);
	

	
	NSString* result = [[NSString alloc] initWithCString:wordsChar];
	free(wordsChar);
//	for(int j = 1; j <= length; j++) {
//		wordChar = wordsChar[j];
//		NSLog(@"%c", wordChar);
//		wordsChar[j] = 0;
//	}
	return result;
}

 

 

下面是快速排序:

 

#import "CommomUitl.h"


@implementation CommomUitl

void swapV(char *a, char *b){
	char temp;     
	temp = *a;     
	*a = *b;    
	*b = temp;
}

int partitions(char originalStr[], int low, int high){
	
	char temp= originalStr[low];
	int i=low,j=high; 
	while(i<j)   {      
		while( (originalStr[j] >= temp) && (i<j) ) 
			j--;      
		if(i<j)  {
			swapV(&originalStr[i], &originalStr[j]);
			i++;
		}      
		while( ( originalStr[i] <= temp ) && (i<j) )
			i++;      
		if(i<j)  {
			swapV(&originalStr[i], &originalStr[j]);
			j--;
		}   
	}    
	return i;
}

void quickSort(char originalStr[], int low, int high){
	
	int pos;     
	if(low < high) {        
		pos=partitions(originalStr,low,high);        
		quickSort(originalStr,low,pos-1);        
		quickSort(originalStr,pos+1,high);              
	}
}
@end

 

 

输入字符串"iteye"

则输出"eeity"

 

 

总结:注意点一,动态分配数组和手动释放

注意点二,数组下标是否越界,以及开始下标值

 

堆与栈

 

以数组的方式申请空间时,由系统管理,其作用域结束则释放;在内存中为连续的,以栈方式存在

malloc方式申请空间,由程序员自己控制;需自己手动free,否则一直存在内存中;在内存中以堆的形式存在,非连续。

 

分享到:
评论

相关推荐

    C#编程经验技巧宝典

    85&lt;br&gt;&lt;br&gt;0130 复制字符串中指定的字符 85&lt;br&gt;&lt;br&gt;0131 巧截字符串的数字 86&lt;br&gt;&lt;br&gt;0132 如何存储变长字符串 86&lt;br&gt;&lt;br&gt;0133 在进行字符串比较时忽略大小写 87&lt;br&gt;&lt;br&gt;0134 如何去除字符串尾空格 87&lt;br&gt;...

    C++编写字符串的排序举例

    - `&lt;string&gt;`:提供了`std::string`类和其他一些与字符串操作相关的函数。 ##### 2. 宏定义 ```cpp #define N 10/* 设定要输入的字符串个数,可更改 */ ``` 这里定义了一个宏`N`,表示要输入的字符串数量为10。...

    mysql5.1中文手册

    replace:字符串替换实用工具&lt;br&gt;8.15. mysql_zap:杀死符合某一模式的进程&lt;br&gt;9. 语言结构&lt;br&gt;9.1. 文字值&lt;br&gt;9.1.1. 字符串&lt;br&gt;9.1.2. 数值&lt;br&gt;9.1.3. 十六进制值&lt;br&gt;9.1.4. 布尔值&lt;br&gt;9.1.5. 位字段值&lt;br&gt;9.1.6....

    生成字典排序和快速排序源代码c++

    在C++中,可以使用递归实现快速排序,每次调用快速排序函数时,处理子数组直到所有元素都被正确排序。 快速排序的平均时间复杂度为O(n log n),在最坏情况下(输入数组已经完全排序或逆序)时间复杂度为O(n^2),但...

    asp.net专家疑难解答200问

    如何使用Web.config配置数据库连接字符串 &lt;br&gt;161.如何编写访问数据库的通用代码 &lt;br&gt;162.如何在SQL Server数据库中编程获取用户表的数目和名称 &lt;br&gt;163.如何获取SQL Server服务器端所有数据库列表 &lt;br&gt;164.如何保存...

    string_字符串_

    3. **字符串比较**:实现不区分大小写的字符串比较,或者根据特定规则的字符串排序。 4. **字符串清理**:去除字符串两端的空白字符,或者替换特定字符。 最后,`XMemory.h` 文件可能涉及到内存管理相关的内容。...

    freemarker总结

    其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替&gt;会有更好的效果,因为 FreeMarker会把&gt;解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:&lt;#if (x&gt;y)&gt; ...

    C++实现字符串删除字符后逆序输出

    在C++编程中,本文介绍了一个实用的问题解决案例:如何删除字符串中的特定字符并按字典逆序排序输出。这个程序适用于C++初学者,它涉及到字符串操作、字符比较、数组处理以及排序算法等多个核心概念。 首先,我们...

    2011acmpeixun

    `&lt;cstring&gt;`字符串处理,等同于C的`&lt;string.h&gt;`;`&lt;ctime&gt;`时间函数,与C的`&lt;time.h&gt;`相同;`&lt;deque&gt;`双端队列容器;`&lt;exception&gt;`异常处理;`&lt;fstream&gt;`文件输入输出;`&lt;functional&gt;`定义了函数对象,可以替代...

    vb控件开发 开发ocx

    在文本框中快速增加一串字符&lt;END&gt; 81 , 81.txt 在文本框中实现由加减号输入数据&lt;END&gt; 82 , 82.txt 在运行时维护DBGRID的栏位宽度&lt;END&gt; 83 , 83.txt 怎样使用VB开发基于Sybase的软件&lt;END&gt; 84 , 84.txt 怎样在运行时...

    Trie树_字典树(字符串排序)简介及实现

    Trie树常用于搜索引擎的文本词频统计,以及各种需要大量字符串排序和查找的场景。 Trie树的优点主要包括: 1. 不限制子节点的数量,可以包含任意数量的子节点。 2. 自定义的输入序列化,不局限于特定的语言或应用...

    匹配目录下所有字符串

    标题“匹配目录下所有字符串”和描述“搜索出目录下所有与字符串相匹配的.java .c .h文件”指出,我们需要关注的是如何在指定目录及其子目录下的特定文件类型中查找含有特定字符串的文件。这里涉及的主要知识点包括...

    串的数据结构实现_算法、

    3. 字符串排序:对字符串数组进行排序,可以使用快速排序、归并排序等通用算法,也可以设计针对字符串特性的排序算法,如 radix sort(基数排序)。 4. 字符串连接:将多个字符串合并为一个,C语言中可使用`strcat`...

    qsort总结.pdf快速排序总结qsort总结.pdf快速排序总结

    ### 快速排序(qsort)总结与应用案例详解 #### 一、引言 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔于1960年提出。它利用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子...

    七种快速排序算法

    如果结构体中包含字符串成员,可以使用`strcmp`函数来比较字符串的字典顺序,`cmp`函数调用`strcmp`进行比较。 7. **计算几何中的凸包问题**: 在计算几何中,求凸包通常需要对点集进行特定的排序。这里提供的`...

    以O(N)时间对可变长度字符串进行排序

    5. **自定义比较函数**:在通用的比较排序算法(如快速排序、归并排序)中,使用自定义的比较函数来处理字符串。例如,可以先按长度排序,长度相同时再按字典序排序。这种方法需要额外的排序步骤,但依然可以保持...

    一种适合Java环境的中文快速排序和模糊检索方法.pdf

    【摘要】中提到的是一种针对Java环境的中文字符串和数字类型记录的快速排序及模糊检索方法。由于Java语言对中文支持的不足,使得中文字符串排序无法满足应用需求,因此作者提出了一个通用的排序方法,旨在解决这个...

    C_C++头文件.txt

    - **`&lt;cstring&gt;`**: 类似于C库中的`&lt;string.h&gt;`,提供字符串处理函数。 - **`&lt;ctime&gt;`**: 类似于C库中的`&lt;time.h&gt;`,提供时间日期相关函数。 - **`&lt;deque&gt;`**: 双端队列容器,支持两端的快速插入删除操作。 - **`...

    VC++头文件.pdf

    18. `&lt;sstream&gt;`:基于字符串的流,可以将字符串作为输入/输出源。 19. `&lt;stack&gt;`:堆栈容器,LIFO(后进先出)。 20. `&lt;stdexcept&gt;`:标准异常类,如`std::runtime_error`。 21. `&lt;streambuf&gt;`:底层输入/输出支持...

Global site tag (gtag.js) - Google Analytics