各种排序oc实现

//
//  main.m
//  OrderTest
//
//  Created by Roeru on 23/7/14.
//  Copyright (c) 2014 Shinoi. All rights reserved.
//

#import <Foundation/Foundation.h>

void noNameSort(int a[],int m,int n)
{
    int l;
    int temp;
    if (m < n) {
        temp = a[m];
        for (l = m - 1; l >= 0 && a[l] > temp; l--) {
            a[l + 1] = a[l];
            a[l] = temp;
        }
        noNameSort(a,m+1,n);
    }

}

void quickSort(int a[], int l, int r)
{
    
    if (l < r)
    {

        int i = l, j = r, x = a[l];
        while (i < j)
        {
            while(i < j && a[j] >= x)
            {
		j--;
	    }
            if(i < j)
            {

                a[i] = a[j];
                i = i + 1;

            }

            while(i < j && a[i] < x)
            {
		i++;
	     }
            if(i < j)
            {
		a[j] = a[i];
                j = j - 1;
            }
        }
        a[i] = x;
        quickSort(a, l, i - 1);
        quickSort(a, i + 1, r);
    }
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        int i;
        NSLog(@"How many number du you want");
        scanf("%d",&i);
        
        int a[i - 1];
        
        for (int j = 0; j < i; j ++) {
            NSLog(@"a[%d] = ?",j);
            scanf("%d",&a[j]);
        }
        
        for (int j = 0; j < i; j ++) {
            NSLog(@"a[%d] = %d",j,a[j]);
            
        }
        
        NSLog(@"Which order do you want");
        NSLog(@"1.Exchange order");
        NSLog(@"2.Insert order");
        NSLog(@"3.Selectionsort");
        NSLog(@"4.Shell");
        NSLog(@"5.CocktailSort");
        NSLog(@"6.QuickSort");
        NSLog(@"7.NonameSort");
        
        int choose;
        scanf("%d",&choose);
        int k,l;
        int temp;       //存放中间变量
        
        if (1 == choose)
        {
            
            
            for (k = 0; k < i ; k++) {
                for (l = 0; l < i - 1; l ++) {
                    if (a[l] > a[l + 1]) {
                        temp = a[l];
                        a[l] = a[l + 1];
                        a[l + 1] = temp;
                    }
                }
            }
            
        }
        
        if (2 == choose) {
            
            
            for (k =1 ; k < i; k++) {
                temp = a[k];
                for (l = k - 1; l >= 0 && a[l] > temp; l--) {
                    a[l + 1] = a[l];
                    a[l] = temp;
                }
            }

        }
        
        
        if (3 == choose) {
            for (k = 0; k < i - 1; k++) {
                for (l = k + 1 ; l < i; l++) {
                    if (a[k] > a[l]) {
                        temp = a[k];
                        a[k] = a[l];
                        a[l] = temp;
                    }
                }
            }
            

        }
        
        if (4 == choose) {
                
            k = i / 2;
                
            while (k > 0) {
                for (int n = 0; n + k < i; n++) {
                    temp = a[n];
                    if (temp > a[n + k]) {
                        a[n] = a[n + k];
                        a[n + k] = temp;
                    }
                }
                k = k - 1;
            }
               
        }
        
        if (5 == choose) {
            
            int bottom = 0;
            int top = i - 1;
            int result = 1;
            int m,n;
            
            while (result) {
                for (n = bottom; n < top; n++) {
                    if (a[n] > a[n + 1]) {
                        temp = a[n];
                        a[n] = a[n + 1];
                        a[n + 1] = temp;
                        result = 2;
                    }
                }
                bottom++;
                if (bottom == top) {
                    result = 0;
                    break;
                }
                
                for (m = top; m > 0; m--) {
                    if (a[m] < a[m - 1]) {
                        temp = a[m];
                        a[m] = a[m-1];
                        a[m-1] = temp;
                    }
                }
                top--;
                if (bottom == top) {
                    result = 0;
                    break;
                }
            }
            

            
        }
        if (6 == choose) {
            quickSort(a, 0, i - 1);
        }
        if (7 == choose) {
            noNameSort(a,1,i);
        }
        NSLog(@"after the order");
        for (int j = 0; j < i; j ++) {
            
            NSLog(@"a[%d] = %d",j,a[j]);
            
        }

    }
    return 0;
}

各种排序oc实现

时间: 2024-10-11 17:17:21

各种排序oc实现的相关文章

iOS开发之Block

iOS开发之Block 1.block的含义和作用 UI开发和网络常见功能实现回调, 按钮的事件处理方法是回调方法, 网络下载后的回调处理 (1) 按钮 target-action 一个方法传入按钮中 (2) 表格视图 传入一个指针self, 回调视图控制器中的方法 (3) block 语句块, 解决回调, 理解为"匿名函数", 定义在方法里面 2.block的基本使用(语法) 涉及知识点: 定义block变量,定义block语句块 block参数和返回值 block捕获外部变量(包括

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS

排序算法的基本思想和OC代码实现

算法的基本思想和OC代码实现 一 .冒泡排序   (平均时间复杂度 o(N*N))  基本思想:两个数比较大小,较大的数下沉,较小的数冒起来. 过程:比较相邻的两个数据,如果第二个数小,就交换位置 从后向前两两比较,一直到比较最前两个数据.最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了. 继续重复上述过程,依次将第2,3,….,n-1个最小数排好位置. int arr[5]={23,21,45,23,64}; int temp; for (int i=0; i<4; i++) {

OC 遍历及排序

// main.m #import <Foundation/Foundation.h> #import "person.h" int main(int argc, const char * argv[]) { //数组遍历 //原理:通过for循环的循环变量?用作数组元素下标来获取不同下标的 元素. // 循环次数就是数组元素的个数.: // NSArray *cityarray=[NSArray arrayWithObjects:@"北京",@&quo

OC 排序

大体上,OC中常用的数组排序有以下几种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors:. 1.简单排序(sortedArrayUsingSelector:) 如果只是对字符串的排序,可以利用sortedArrayUsingSelector:方法就可以了,代码如下 //简单排序 void sortArray1(){ NSArray *array = [NSArray array

OC基础-NSArray排序

OC中的NSArray提供了较多的排序方法,可以对数组元素进行有效的排序,下面先准备一个Student和Course类来作为练习对象. 一 创建练习类 1 Course类 // Course.h #import <Foundation/Foundation.h> @interface Course : NSObject /** 初始化Course类的类方法*/ + (instancetype)courseWithEnglish:(float)englishRecords            

OC中排序

排序前 必须先定义一个比较的方法  如下 -(NSComparisonResult )studentcompare:(Student *)stu; 在Sstudent的类中定义 for ....in的用法 取出in后面数组中的各个元素 将数组中的元素排序 NSArray *array3=[array2 sortedArrayUsingSelector:@selector(studentcompare: )]; OC中排序

oc 之中的 汉字字符串转化成为拼音 汉字字符串的排序

在oc 之中的字符串为汉字的时候,我们经常要进行字符串比較,可是汉字不能比較,所以就要将汉字转化成为拼音,详细步骤例如以下: //可变字符串 必须是可变字符串. NSMutableString *mutableString = [NSMutableString stringWithString:@"小明"]; //转成带声调的拼音 CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformT

oc中排序的总结

/*******************************快速排序 start**********************************///随即取 当前取第一个,首先找到第一个的位置,然后分成left和right两组子集 ,分别对left和right继续执行分割(同上操作) -(void)QuickSort:(NSMutableArray *)list StartIndex:(NSInteger)startIndex EndIndex:(NSInteger)endIndex{