冒泡排序
OC
-(void)bubbleSort{
NSMutableArray *bubbleSortA = @[@6,@10,@7,@8,@20,@21,@9].mutableCopy;
for (int i = 0; i< bubbleSortA.count; i++) {
//外层for循环控制循环次数
for (int j = 0 ; j [bubbleSortA[j +1] intValue]) {
[bubbleSortA exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
}
NSLog(@"冒泡排序:%@",bubbleSortA);
}
C
int a[6] = {1,20,19,11,8,7,9,12};
for (int i = 0 ; i<5; i++) {
for (int j = 0; j < 5 - i; j++) {
if (a[j] > a[j +1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j+1] = temp;
}
}
}
printf("按升序排好序的数组:\n");
for (int i =0 ; i < 6; i++) {
printf("a[%d] = %d \t ",i,a[i] );
}
插入排序
#pragma mark---插入排序
-(void)insertSort{
NSMutableArray *array = @[@11,@9,@1,@13,@8,@10].mutableCopy;
/*从下标y1开始*/
for (int i = 1; i0 && [temp intValue] < [array[j -1] intValue]) {
array[j] = array[j-1];
j --;
}
array[j] = temp;
}
}
NSLog(@"%@",array);
}
解释:从第二个开始,取出该位置的值为临时值temp,位置为j,此时j的位置为空,叫做坑,然后temp依次往前比较,直到找到比temp小,把temp插入该的位置,完成一次循环。
插入排序复杂度分析:
从空间上来看,它只需要一个记录的辅助空间,因此关键是看它的时间复杂度。当最好的情况,时间复杂度为O(n)。当最坏的情况,即待排序表示逆序的情况,如{6,5,4,3,2},此时需要比较(n+2)(n-1)/2次,记录的移动次数也达到(n+4)(n-1)/2次。如果排序记录是随机的,那么根据概率相同的原则,平均比较和移动次数约为n2/4次,因此插入排序法的时间复杂度为O(n2),该排序比冒泡和选择排序的性能要好一些。
希尔排序
-(void)shellSort{
//起始间隔值gap设置为总数的一半,直到gap==1结束
NSMutableArray *array =@[@6,@10,@7,@8,@20,@19,@9,@8,@3].mutableCopy;
int gap = (int)array.count /2;
while (gap >= 1) {
for (int i = gap; i= gap && [temp intValue] < [array[j-gap]intValue]) {
[array exchangeObjectAtIndex:j withObjectAtIndex:j-gap];
j -=gap;
}
array[j] = temp;
}
gap = gap/2;
}
}
希尔排序(Shell Sort):是插入排序算法的一种更高效的改进版本。在这之前冒泡、选择、插入排序的时间复杂度基本都是O(n²)的,希尔排序算法是突破这个时间复杂度的第一批算法之一。
官方解释如下:
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
希尔排序在插入排序的基础上增加一个叫增量的概念。那什么增量?插入排序只能与相邻的元素进行比较,而希尔排序则是进行跳跃比较,而增量就是步长。比如增量为3时,下标为0的元素与下标为3的元素比较,3再与6比较,1与4比较,4再与7比较……比较完后,再去减少增量,重复之前步骤,直到增量为1,此时只有一个分组了,再对这一个分组进行插入排序,整个希尔排序就结束了。
选择排序
-(void)selectSort{
//选择排序 思想:两个两个做比较,如果第一个大于第二个就交换,算法思想很简单
NSMutableArray *array = @[@6,@5,@7,@10,@9,@20,@22,@7,@2,@6,@13].mutableCopy;
for (int i = 0; i [array[j] intValue]) {
[array exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
}
NSLog(@"%@",array);
}