冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。
-(NSMutableArray*)array_sort:(NSArray*)numarr
{
NSUInteger count=numarr.count;
int a[count];
//把数组里的元素一一取出转化为整型:
for (int i =0; i a[i + 1])
{
int temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
//把排好序的数据重新放回数组里:
for (int c =0; c
快速排序:每次选一个基准数,比基准数小的放左边,比基准数大的放右边。
NSMutableArray *QuickSortArr = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"6",@"9",@"1",@"4",nil];
[self quickSort:QuickSortArr LowQ:0 HightQ:5];
//快速排序
-(NSMutableArray *)quickSort:(NSMutableArray *)dataArr LowQ:(int)low HightQ:(int)hight
{
//1.首次调用传入要排序的数组,传入起始索引和最高索引,对齐比较。
if(low
直接插入排序:插前面,依次根后面的数比较
+ (NSMutableArray *)directSortWithString:(NSString *)str {
NSLog(@"正在进行直接插入排序,请稍等...");
NSMutableArray *sortedArr = [[NSMutableArray alloc]init];
NSArray *tempArr = [str componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
for(NSString *word in tempArr)
{
if (![word isEqualToString:@""]) {
int selectIndex = [self directSortSelectIndexWithSortedArr:sortedArr WithString:word];
[sortedArr insertObject:word atIndex:selectIndex];
}
}
return sortedArr;
}
#pragma mark 快速插入排序
+(int)directSortSelectIndexWithSortedArr:(NSMutableArray *)arr WithString:(NSString *)str{
float willSortNumber = [str floatValue];
for (int i = 0; i < arr.count; i++) {
if (willSortNumber < [arr[i] floatValue]) {
return i;
}
}
return arr.count;
}
二分插入排序:每次插中间。
+ (NSMutableArray *)dichotomySortWithString:(NSString *)str{
NSMutableArray *sortedArr = [[NSMutableArray alloc]init];
NSLog(@"正在进行二分法插入排序,请稍等...");
NSArray *tempArr = [str componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
for(NSString *word in tempArr)
{
if (![word isEqualToString:@""]) {
int selectIndex = [self dichotomySelectIndexWithSortedArr:sortedArr WithString:word];
[sortedArr insertObject:word atIndex:selectIndex];
}
}
return sortedArr;
}
#pragma mark 二分法插入排序
+(int)dichotomySelectIndexWithSortedArr:(NSMutableArray *)arr WithString:(NSString *)str{
float willSortNumber = [str floatValue];
int left = 0;
int i = 0;
int righr = arr.count;
int middle = (righr + left) / 2;
// int middle2 = (righr -left)/2 +left
while (righr > left)
{ i ++;
middle = (left + righr) / 2;
(willSortNumber < [arr[middle] floatValue]) ? righr = middle : (left = middle + 1);
}
return left;
}
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
/*
21,4,25,8
1---4,21,25,8
2---4,8,25,21
3---4,8,21,25
*/
NSMutableArray * dataArray = [[NSMutableArray alloc]initWithObjects:@"15",@"8", @"9", @"87", @"22",@"1",@"29",@"11", nil];
for (int i = 0; i < dataArray.count - 1; i ++)
{
// 声明一个min 假设是最小值的那个索引
int min = i;
// 将第min个值与其他值进行对比
for (int j = i + 1; j < dataArray.count; j++)
{
// 如果min对应的值大于后面的 说明j索引对应的值较小 就把 j赋给min
if ([[dataArray objectAtIndex:min] intValue] > [[dataArray objectAtIndex:j] intValue] )
{
min = j;
}
}
// 如果 m与i相同 就不用进行交换 不同的话就进行交换
if (min != i)
{
[dataArray exchangeObjectAtIndex:min withObjectAtIndex:i];
}
}
NSLog(@"==----%@",dataArray );