ObjC语法练习 冒泡排序、选择排序、矩阵相乘

用OC实现的冒泡排序、选择排序、矩阵相乘,纯粹是用来练习语法。

冒泡排序,程序如下:

void bubbleSort()
{
    //初始化数组
    NSMutableArray *array1 = [[NSMutableArray alloc] initWithCapacity:8];
    [array1 addObject:@"5"];
    [array1 addObject:@"10"];
    [array1 addObject:@"8"];
    [array1 addObject:@"12"];
    [array1 addObject:@"9"];
    [array1 addObject:@"4"];
    [array1 addObject:@"20"];
    [array1 addObject:@"14"];

    NSInteger count = array1.count;

    for(int i = 0; i < count; ++i){
        for(int j = 0; j < count - i - 1; ++j){
            NSInteger before = [[array1 objectAtIndex:j] integerValue];
            NSInteger after = [[array1 objectAtIndex:j + 1] integerValue];
            if(before > after){
                NSInteger temp = before;
                [array1 setObject:[NSString stringWithFormat:@"%ld", after] atIndexedSubscript:j];
                [array1 setObject:[NSString stringWithFormat:@"%ld",temp ] atIndexedSubscript:j + 1];
            }
        }
    }

    for(int i = 0; i < count; ++i){
        NSLog(@"%@",[array1 objectAtIndex:i]);
    }
}

选择排序,程序如下:

void selectSort()
{
    //初始化数组
    NSMutableArray *array1 = [[NSMutableArray alloc] initWithCapacity:8];
    [array1 addObject:@"5"];
    [array1 addObject:@"10"];
    [array1 addObject:@"8"];
    [array1 addObject:@"12"];
    [array1 addObject:@"9"];
    [array1 addObject:@"4"];
    [array1 addObject:@"20"];
    [array1 addObject:@"14"];

    NSInteger count = array1.count;

    for(int i = 0; i < count - 1; ++i){
        NSInteger min = i;
        for(int j = i + 1; j < count; ++j){
            NSInteger minNum = [[array1 objectAtIndex:min] integerValue];
            NSInteger num = [[array1 objectAtIndex:j] integerValue];
            if(minNum > num){
                min = j;
            }
        }
        NSInteger changeNum = [[array1 objectAtIndex:min] integerValue];
        NSInteger temp = [[array1 objectAtIndex:i] integerValue];
        [array1 setObject:[NSString stringWithFormat:@"%ld",changeNum] atIndexedSubscript:i];
        [array1 setObject:[NSString stringWithFormat:@"%ld",temp] atIndexedSubscript:min];
    }

    for(int i = 0; i < count; ++i){
        NSLog(@"%@",[array1 objectAtIndex:i]);
    }
}

矩阵相乘,程序如下:

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

        //bubbleSort();
        //selectSort();

        //矩阵相乘
        //初始化矩阵1,矩阵1为:
        //    1   0   2
        //    -1  3   1
        NSMutableArray *array1 = [[NSMutableArray alloc] initWithCapacity:2];
        NSMutableArray *row1 = [[NSMutableArray alloc] initWithCapacity:3];
        NSMutableArray *row2 = [[NSMutableArray alloc] initWithCapacity:3];
        [row1 addObject:@"1"];
        [row1 addObject:@"0"];
        [row1 addObject:@"2"];
        [row2 addObject:@"-1"];
        [row2 addObject:@"3"];
        [row2 addObject:@"1"];
        [array1 addObject:row1];
        [array1 addObject:row2];
        //初始化矩阵2,矩阵2为
        //   3    1
        //   2    1
        //   1    0
        NSMutableArray *array2 = [[NSMutableArray alloc] initWithCapacity:3];
        NSMutableArray *newrow1 = [[NSMutableArray alloc] initWithCapacity:2];
        NSMutableArray *newrow2 = [[NSMutableArray alloc] initWithCapacity:2];
        NSMutableArray *newrow3 = [[NSMutableArray alloc] initWithCapacity:2];
        [newrow1 addObject:@"3"];
        [newrow1 addObject:@"1"];
        [newrow2 addObject:@"2"];
        [newrow2 addObject:@"1"];
        [newrow3 addObject:@"1"];
        [newrow3 addObject:@"0"];
        [array2 addObject:newrow1];
        [array2 addObject:newrow2];
        [array2 addObject:newrow3];

        //第一个矩阵的行数
        NSInteger numRow1 = array1.count;
        //第一个矩阵的列数
        NSArray  *Col = [array1 objectAtIndex:0];
        NSInteger numCol1 = Col.count;
        NSLog(@"numRow1 = %ld",numRow1);
        NSLog(@"numCol1 = %ld",numCol1);

        //第二个矩阵的列
        NSArray *Col2 = [array2 objectAtIndex:0];
        NSInteger numCol2 = Col2.count;
        NSLog(@"numCol2 = %ld",numCol2);

        NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:numRow1];
        //开始矩阵相乘
        for(int i = 0; i < numRow1; ++i){
            NSMutableArray *temprow = [[NSMutableArray alloc] initWithCapacity:numCol2];
            for(int j = 0; j < numCol2; ++j){
                NSInteger sum = 0;
                for(int k = 0; k < numCol1; ++k){
                    NSInteger num1 = [[[array1 objectAtIndex:i] objectAtIndex:k] intValue];
                    NSInteger num2 = [[[array2 objectAtIndex:k] objectAtIndex:j] intValue];
                    sum = sum + (num1 * num2);
                }
                NSString *tempString = [NSString stringWithFormat:@"%ld",sum ];
                [temprow addObject:tempString];
            }
            [array3 addObject:temprow];
        }
        for(int i = 0; i < numRow1;++i){
            for(int j = 0; j < numCol2; ++j){
                NSLog(@"%@",[[array3 objectAtIndex:i] objectAtIndex:j]);
            }
        }
    }
    return 0;
}
时间: 2024-12-26 02:55:53

ObjC语法练习 冒泡排序、选择排序、矩阵相乘的相关文章

C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序,然后是測试的样例.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序

下面列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序,然后是测试的例子.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

经典排序:冒泡排序+选择排序 小结

经典排序:冒泡排序+选择排序 例 FJUTOJ 1842 冒泡排序 原理是取相邻两个数进行大小比较,判断是否交换. 以从小到大排序为例,冒泡排序就像气泡一样,最小的数慢慢浮上来,最大的数慢慢沉下去.那么完整从头到尾做一次之后最后一位就是原序列中最大的数字了.然后只需要对1~(n-1)个数字进行排序,完成后倒数第二个数字也为原序列的1~n-1元素中最大的值.如此重复,进行n-1次一定能完成排序.参考代码: 1 #include <stdio.h> 2 void BubbleSort(int *,

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)

冒泡排序 public static void bubbleSort(int[] arr){ int lgn = arr.length; for (int i = 0; i < lgn - 1; i++) { for (int j = 0; j < lgn - 1 - i; j++) { if(arr[j] > arr[j + 1]){ int temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } } 选择排序 publ

8.8 冒泡排序 选择排序 二分查找 递归使用

冒泡排序: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100000 #define M 100000 void show_arr(int * a,int n) { int i; for(i = 0; i < n; i++) { printf("%d ",a[i]); } printf("\n"); } void init_arr(in

冒泡排序,选择排序,二分法

public class Paixu { public static void main(String[] args) { int[]arr={1,2,8,10,18,22,28,100,20}; /* //选择排序 从小到大 for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if (arr[i]>arr[j]) { int tmp=arr[i]; arr[i]=arr[j]

C 冒泡排序 选择排序

数组的冒泡排序与选择排序 [email protected]:~/select$ cat main.c  #include <stdio.h> #include <stdlib.h> int swap_conut  = 0 ; //记录交换次数 int loop_count  = 0 ; //记录循环次数 void swap(int *a,int *b) //指针级 数据交换 { //一个数连续异或同样的数两次,还是这个数 //相同位结果为0,不同位结果为1 *a = *a ^ *

排序算法详解(Go语言实现):冒泡排序/选择排序/快速排序/插入排序

算法是程序的灵魂,而排序算法则是一种最基本的算法.排序算法有许多种,本文介绍4中排序算法:冒泡排序,选择排序,快速排序和插入排序,以从小到大为例. 一.冒泡排序 冒泡排序的原理是,对给定的数组进行多次遍历,每次均比较相邻的两个数,如果前一个比后一个大,则交换这两个数.经过第一次遍历之后,最大的数就在最右侧了:第二次遍历之后,第二大的数就在右数第二个位置了:以此类推. //冒泡排序(排序10000个随机整数,用时约145ms) func bubbleSort(nums []int) { for i