真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ios開發(fā)排序,iOS開發(fā)進階

ios開發(fā)有沒有方法進行字符串排序

NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch | NSWidthInsensitiveSearch | NSForcedOrderingSearch;

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供眉山網(wǎng)站建設、眉山做網(wǎng)站、眉山網(wǎng)站設計、眉山網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、眉山企業(yè)網(wǎng)站模板建站服務,十多年眉山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

NSComparator temSortFirst = ^(NSString *obj1, NSString *obj2){

//#warning 這里是處理比較邏輯。下面的把字符串分開。處理結(jié)果是:按分開后的結(jié)果比較。把分開前的字符串按比較結(jié)果排序

obj1 = [obj1 componentsSeparatedByString:@"/"].lastObject;

obj2 = [obj2 componentsSeparatedByString:@"/"].lastObject;

NSRange range = NSMakeRange(0, obj1.length);

// obj1在前,升序;obj2在前,降序

return [obj2 compare:obj1 options:comparisonOptions range:range];

};

NSArray *resultArrayFirst = [mutableArray sortedArrayUsingComparator:temSortFirst];

// NSLog(@"%@", resultArrayFirst);

#warning 再排序

NSComparator temSortSecond = ^(NSString *obj1, NSString *obj2) {

NSRange range = NSMakeRange(0, obj1.length);

obj1 = [obj1 componentsSeparatedByString:@"/"].lastObject;

obj2 = [obj2 componentsSeparatedByString:@"/"].lastObject;

obj1 = [[obj1 componentsSeparatedByString:@"."].firstObject componentsSeparatedByString:@"_"].firstObject;

obj2 = [[obj2 componentsSeparatedByString:@"."].firstObject componentsSeparatedByString:@"_"].firstObject;

if (obj1 == obj2) {

return [obj1 compare:obj2 options:comparisonOptions range:range];

} else {

return [obj2 compare:obj1 options:comparisonOptions range:range];

}

};

_resultArraySecond = (NSMutableArray *)[resultArrayFirst sortedArrayUsingComparator:temSortSecond];

// NSLog(@"%@", resultArraySecond);

/*

////測試合并成一處??結(jié)果無效。

// NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch | NSWidthInsensitiveSearch | NSForcedOrderingSearch;

// NSComparator temSort = ^(NSString *obj1, NSString *obj2) {

// NSRange range = NSMakeRange(0, obj1.length);

// obj1 = [obj1 componentsSeparatedByString:@"/"].lastObject;

// obj2 = [obj2 componentsSeparatedByString:@"/"].lastObject;

// obj1 = [[obj1 componentsSeparatedByString:@"."].firstObject componentsSeparatedByString:@"_"].firstObject;

// obj2 = [[obj2 componentsSeparatedByString:@"."].firstObject componentsSeparatedByString:@"_"].firstObject;;

//

// if (obj1 == obj2) {

// return [obj1 compare:obj2 options:comparisonOptions range:range];

// }

//// else if (obj3 obj4) {

//// return [obj2 compare:obj1 options:comparisonOptions range:range];

//// }

// else {

//

// return [obj2 compare:obj1 options:comparisonOptions range:range];

// }

// };

// NSArray *resultArray = [temDataArr sortedArrayUsingComparator:temSort];

// NSLog(@"%@", resultArray);

*/

iOS-選擇排序(Selection sort)

時間復雜度: O(n2)

穩(wěn)定性:不穩(wěn)定

假設序列有 n個元素 , n1 ,根據(jù)算法步驟,第1輪需在n個元素中遍歷n次查找到最小的元素,第2輪需在剩余的(n-1)個元素中遍歷(n-1)次找到最小的元素,… 第n-1輪需在剩余的2個元素中找到最小的元素,第n輪剩余1個元素放在已排序元素的末尾。

函數(shù)表達式為:

f(n) = n+(n-1)+…+2+1

f(n) = (n+1)*n/2

f(n) = (n2+n)/2

用大O表示法,忽略常量、低階和常數(shù)系數(shù)。

時間復雜度為: O(n2)

終端打印結(jié)果:

網(wǎng)上搜了一下,很多都說得云里霧里的,下面舉個栗子????說明:

假設某學校積分入學剩余2個學位,A、B、C三位學生先后報名,積分分別為 [A(90), B(90), C(100)] ,積分從高到低排序,前兩名獲得入學資格,如果使用選擇排序:

第一輪排序會將 A 和 C 交換,變成 [C(100), B(90), A(90)] ,此時排序已完成;

A、B同積分,但原來A比B優(yōu)先報名的,本應優(yōu)先取得入學資格,排序后卻變成了B在A的前面,現(xiàn)實中必然是不公平的。

因此可以看出, 選擇排序 是 不穩(wěn)定 的。

RUNOOB.COM-1.2 選擇排序

ios幾種簡單有效的數(shù)組排序方法

數(shù)據(jù)排序方法

好的排序方法可以有效提高排序速度,提高排序效果。

在計算機領域主要使用數(shù)據(jù)排序方法根據(jù)占用內(nèi)存的方式不同分為2大類:內(nèi)部排序方法與外部排序方法。

內(nèi)部排序方法

若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內(nèi)部排序。

內(nèi)排序的方法有許多種,按所用策略不同,可歸納為五類:插入排序、選擇排序、交換排序、歸并排序和基數(shù)排序。

其中,插入排序主要包括直接插入排序和希爾排序兩種;選擇排序主要包括直接選擇排序和堆排序;交換排序主要包括氣(冒)泡排序和快速排序。

外部排序方法

外部排序基本上由兩個相互獨立的階段組成。首先,按可用內(nèi)存大小,將外存上含n個記錄的文件分成若干長度為k的子文件或段(segment),依次讀入內(nèi)存并利用有效的內(nèi)部排序方法對它們進行排序,并將排序后得到的有序子文件重新寫入外存。通常稱這些有序子文件為歸并段或順串;然后,對這些歸并段進行逐趟歸并,使歸并段(有序子文件)逐漸由小到大,直至得到整個有序文件為止。

ios 類似數(shù)組排序的方法怎么寫

IOS幾種簡單有效的數(shù)組排序方法

//第一種,利用數(shù)組的sortedArrayUsingComparator調(diào)用 NSComparator ,obj1和obj2指的數(shù)組中的對象

NSComparator cmptr = ^(id obj1, id obj2){

if ([obj1 integerValue] [obj2 integerValue]) {

return (NSComparisonResult)NSOrderedDescending;

}

if ([obj1 integerValue] [obj2 integerValue]) {

return (NSComparisonResult)NSOrderedAscending;

}

return (NSComparisonResult)NSOrderedSame;

};

NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];

//排序前

NSMutableString *outputBefore = [[NSMutableString alloc] init];

for(NSString *str in sortArray){

[outputBefore appendFormat:@"];

}

NSLog(@"排序前:%@",outputBefore);

[outputBefore release];

//第一種排序

NSArray *array = [sortArray sortedArrayUsingComparator:cmptr];

NSMutableString *outputAfter = [[NSMutableString alloc] init];

for(NSString *str in array){

[outputAfter appendFormat:@"];

}

NSLog(@"排序后:%@",outputAfter);

[outputAfter release];

第二種 排序方法 利用sortedArrayUsingFunction 調(diào)用 對應方法customSort,這個方法中的obj1和obj2分別是指數(shù)組中的對象。

NSInteger customSort(id obj1, id obj2,void* context){

if ([obj1 integerValue] [obj2 integerValue]) {

return (NSComparisonResult)NSOrderedDescending;

}

if ([obj1 integerValue] [obj2 integerValue]) {

return (NSComparisonResult)NSOrderedAscending;

}

return (NSComparisonResult)NSOrderedSame;

}

NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];

//排序前

NSMutableString *outputBefore = [[NSMutableString alloc] init];

for(NSString *str in sortArray){

[outputBefore appendFormat:@"];

}

NSLog(@"排序前:%@",outputBefore);

[outputBefore release];

NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil];

NSMutableString *outputAfter = [[NSMutableString alloc] init];

for(NSString *str in array){

[outputAfter appendFormat:@"];

}

NSLog(@"排序后:%@",outputAfter);

[outputAfter release];

第三種 利用sortUsingDescriptors調(diào)用NSSortDescriptor

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:NO];//其中,price為數(shù)組中的對象的屬性,這個針對數(shù)組中存放對象比較更簡潔方便

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor count:1];

[_totalInfoArray sortUsingDescriptors:sortDescriptors];

[_airListView refreshTable:_totalInfoArray];

[sortDescriptor release];

[sortDescriptors release];

iOS/OC:希爾排序的理解

希爾排序(Shell Sort),一聽這名字就知道是一個叫希爾的外國人發(fā)明的排序。沒錯,他就是唐納德 希爾(Donald Shell),一位美國的計算機科學家,他于1959年發(fā)明的希爾排序算法。

對于希爾排序,比較正式的官方的解釋是這樣:

希爾排序也是插入排序的一種。既然是其中的一種,那么他們的區(qū)別是什么呢?插入排序在最壞的情況下,即整個數(shù)組是倒序的,此時時間復雜度達到了O(n 2 )。希爾排序在插入排序的基礎上增加一個叫 增量 的概念。那什么增量?插入排序只能與相鄰的元素進行比較,而希爾排序則是進行跳躍比較,而增量就是步長。比如增量為3時,下標為0的元素與下標為3的元素比較,3再與6比較,1與4比較,4再與7比較……想必你肯定做過一群人站成一排,按一二報數(shù),喊一的一隊,喊二的一隊,此時的增量就是2。所以你也可以理解為是按增量進行了分組,再對每一組進行插入排序。當使用一個增量對所有的分組排好序后,再去減少增量,重復之前步驟,直到增量為1,此時只有一個分組了,再對這一個分組進行插入排序,整個希爾排序就結(jié)束了(所以希爾排序也叫 縮小增量排序 ,但顯然沒有希爾排序好聽和高大上 斜眼笑)。

從增量的初始值選取,到逐漸變?yōu)?,將所有用過的增量組成一個序列,就是 增量序列 。而希爾排序的增量序列選擇直接影響它的時間復雜度(不要問我為什么,我也不知道)。最簡單的增量就是希爾鼓勵使用的希爾增量。增量初始值選擇為N/2(N為數(shù)組長度),然后每次將增量除以2,得到下一個增量。所以它的增量序列為{N/2, (N / 2)/2, ..., 1}。除了希爾增量還有 Hibbard 增量 、 Knuth增量 等等都是很復雜的數(shù)學公式,我怕你看了暈,就放在后面介紹吧?。ㄕf的好像自己看了不暈一樣)

那下面我們就以最簡單的希爾增量來進行希爾排序。

然后對比之前文章所寫的選擇排序和插入排序。

三個同樣的數(shù)組,分別使用選擇、插入、希爾進行排序比較時間。

數(shù)組長度1萬時打印結(jié)果為:

數(shù)組長度為兩萬時打印結(jié)果為:

差距是很明顯的。

希爾排序為 不穩(wěn)定性排序 。因為相同的元素可能在各自的插入排序中移動,所以它的穩(wěn)定性就被打破了??赡苡腥讼雴?,穩(wěn)定性是干嘛的???穩(wěn)定的意思是指 相同的元素在排序后的相對位置不變 。比如有兩個5 ,作為區(qū)分前面的叫5 1 ,后面的叫5 2 ,排序完成后5 1 還在5 2 的前面。那你可能會問,反正是一樣的,換了就換唄。但是在實際應用中被排序的對象會擁有不同的屬性,舉個栗子,公司在招聘時,想要年齡小的,所以對所有人進行了按年齡的排序。之后還想看成績分數(shù)高的。所以在按成績進行排序時就有可能出現(xiàn)成績一樣的,但他們的年齡不一樣,而你不能把成績相同但年齡大的排在小的前面。此時算法的穩(wěn)定性就有了意義。

使用希爾增量,在最壞的情況下時間復雜度仍為O(n 2 ),而使用hibbard增量在最壞的情況下卻為O(n 3/2 )。

如果覺得作者對哪里的理解有偏差或者其他的優(yōu)化,希望不吝賜教,留言指正。謝謝支持~

iOS:常用排序算法

冒泡排序是相鄰數(shù)據(jù)進行兩兩比較,假設升序排序,則一趟排序下來,就會有一個最大數(shù)產(chǎn)生在數(shù)組最末端。因為有 n 個數(shù)據(jù)需要進行比較,而每一趟排序需要遍歷n個數(shù)據(jù),所以時間復雜度為O(n^2)

快速排序是定下一個基準數(shù)(一般默認定義最左側(cè)數(shù)據(jù)為基準數(shù),可以理解為參照數(shù)),每一趟排序都需要從左(角標 i)右(角標 j)兩側(cè)開始像中間進行排序,因為基準數(shù)定義在左側(cè),一般先從右側(cè)開始向左側(cè)移動,j--;遇到小于基準數(shù)的暫停,左側(cè)開始向右移動,i++;遇到大于基準數(shù)的暫停;然后交換i 和 j 所對應的數(shù)據(jù)。當i和j相遇的時候,則將相遇值與基準數(shù)進行交換,一趟排序結(jié)束。時間復雜度是O(log2 n)


網(wǎng)站標題:ios開發(fā)排序,iOS開發(fā)進階
文章來源:http://weahome.cn/article/dscjppi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部