1.问:用object-c写一个快速排序
ChatGPT:
- (NSArray *)quickSortArray:(NSArray *)array {
NSInteger count = array.count;
if (count <= 1) {
return array;
}
NSInteger midIndex = count / 2;
NSNumber *midNumber = array[midIndex];
NSMutableArray *smallArray = [NSMutableArray arrayWithCapacity:1];
NSMutableArray *largeArray = [NSMutableArray arrayWithCapacity:1];
for (NSInteger i = 0; i < count; i++) {
NSNumber *num = array[I];
if (num < midNumber) {
[smallArray addObject:num];
} else if (num > midNumber) {
[largeArray addObject:num];
}
}
NSArray *sortedSmallArray = [self quickSortArray:smallArray];
NSArray *sortedLargeArray = [self quickSortArray:largeArray];
NSMutableArray *sortedArray = [NSMutableArray arrayWithCapacity:1];
[sortedArray addObjectsFromArray:sortedSmallArray];
[sortedArray addObject:midNumber];
[sortedArray addObjectsFromArray:sortedLargeArray];
return sortedArray;
}
文心一言
以下是使用 Objective-C 实现快速排序的代码示例:
#import <QuickSort/QuickSort.h>
int main() {
// 选择一个数组
int[] arr = [5, 2, 8, 4, 6];
// 使用快速排序算法对数组进行排序
QuickSort<int> sort(arr, 0, arr.size - 1);
// 打印排序后的数组
print(arr);
}
// 示例用法
int[] arr = [5, 2, 8, 4, 6];
QuickSort<int> sort(arr, 0, arr.size - 1);
NSLog(@"Sorted array: %@", arr);
在这个示例中,我们定义了一个名为 arr 的整数数组,并使用 QuickSort 算法对其进行排序。我们首先选择数组的第一个元素,然后调用 QuickSort 算法对数组进行排序,最后打印排序后的数组。
请注意,这只是一个简单的示例,实际的快速排序算法可能会更复杂。
猛一看,好像chatgpt回答的非常好,然后,我把chatgpt的代码放到了xcode编辑器里面测试
遗憾的是,排序错了,但是相对于文心一言来说,最起码给出了思路和代码,就像大多数不经常写算法的程序员面试的时候被问到算法题一样,紧紧张张写出了代码,但是运行结果确不对,从这一点可以看出来ChatGPT对写代码又辅助功能,文言一心基本上没有辅助功能。
下面来分析一下,ChatGPT给出的代码哪里出了问题
经过阅读代码,发现代码在对比的时候通过对象来对比,应该把NSNumber转化为int类型,改过之后测试运行正常。
下面给出修改过的代码
-(NSArray *)quickSortArray:(NSArray *)array {
NSInteger count = array.count;
if (count <= 1) {
return array;
}
NSInteger midIndex = count / 2;
NSNumber *midNumber = array[midIndex];
NSMutableArray *smallArray = [NSMutableArray arrayWithCapacity:1];
NSMutableArray *largeArray = [NSMutableArray arrayWithCapacity:1];
for (NSInteger i = 0; i < count; i++) {
NSNumber *num = array[I];
if ([num intValue]< [midNumber intValue]) {
[smallArray addObject:num];
} else if ([num intValue] > [midNumber intValue]) {
[largeArray addObject:num];
}
}
NSArray *sortedSmallArray = [self quickSortArray:smallArray];
NSArray *sortedLargeArray = [self quickSortArray:largeArray];
NSMutableArray *sortedArray = [NSMutableArray arrayWithCapacity:1];
[sortedArray addObjectsFromArray:sortedSmallArray];
[sortedArray addObject:midNumber];
[sortedArray addObjectsFromArray:sortedLargeArray];
return sortedArray;
}
2.问:姓张,给孩子取个名字
ChatGPT
1.张晨雨 2.张子阳 3.张瑞铃 4.张紫宇 5.张若宁 6.张佳欣 7.张栩涵 8.张钰涵 9.张新月 10.张星瑶
文心一言
以下是几个起名字的建议和原因:
根据传统文化和历史名人来命名:例如,可以考虑使用张衡、张飞、岳飞等古代名人的名字;也可以参考现代文化中的名人,比如张学友、张艺谋等。这些名字都具有美好的寓意和积极的意义,能够为孩子带来积极的影响。
根据孩子的特点或个性来命名:可以考虑取一个简短、有趣、易记的名字,比如张小猫、张小兔等;也可以考虑取一个有特殊含义或寓意的名字,比如张梦想、张成功等。
根据名字的含义或寓意来命名:可以选择一些富有意义或者含义深刻的名字,比如张勇敢、张自信、张坚持等,这些名字都有助于孩子建立自信心和积极向上的品质。
以下是几个起名字的建议和原因:
根据传统文化和历史名人来命名:例如,可以考虑使用张衡、张飞、岳飞等古代名人的名字;也可以参考现代文化中的名人,比如张学友、张艺谋等。这些名字都具有美好的寓意和积极的意义,能够为孩子带来积极的影响
根据孩子的特点或个性来命名:可以考虑取一个简短、有趣、易记的名字,比如张小猫、张小兔等;也可以考虑取一个有特殊含义或寓意的名字,比如张梦想、张成功等。
根据名字的含义或寓意来命名:可以选择一些富有意义或者含义深刻的名字,比如张勇敢、张自信、张坚持等,这些名字都有助于孩子建立自信心和积极向上的品质。
看完我也笑了,张成功,张自信,张小猫也是醉了。这一局ChatGPT完胜。
问题3:怎么发财
ChatGPT
文心一言
这次的回答,我觉得百度更好一些,说的更详细一些。ChatGPT有点像结构化的公式。
问题4:怎么找到女朋友
ChatGPT
文心一言
这次感觉ChatGPT回答更好一点,比文心一言聪明一些
问题4:二叉树中序遍历用ObjectC实现
// Definition for a binary tree node.
// struct TreeNode {
// int val;
// struct TreeNode *left;
// struct TreeNode *right;
// };
- (NSArray *)inorderTraversal:(TreeNode *)root {
if (!root) {
return @[];
}
NSMutableArray *res = [NSMutableArray array];
NSMutableArray *stack = [NSMutableArray array];
while (root || stack.count > 0) {
while (root) {
[stack addObject:root];
root = root.left;
}
root = stack.lastObject;
[stack removeLastObject];
[res addObject:@(root.val)];
root = root.right;
}
return res;
}
二叉树前序遍历用ObjectC实现
// Definition for a binary tree node.
// struct TreeNode {
// int val;
// struct TreeNode *left;
// struct TreeNode *right;
// };
- (NSArray *)preorderTraversal:(TreeNode *)root {
if (!root) {
return @[];
}
NSMutableArray *res = [NSMutableArray array];
NSMutableArray *stack = [NSMutableArray array];
[stack addObject:root];
while (stack.count > 0) {
root = stack.lastObject;
[stack removeLastObject];
[res addObject:@(root.val)];
if (root.right) {
[stack addObject:root.right];
}
if (root.left) {
[stack addObject:root.left];
}
}
return res;
}
二叉树后序遍历用ObjectC实现
// Definition for a binary tree node.
// struct TreeNode {
// int val;
// struct TreeNode *left;
// struct TreeNode *right;
// };
- (NSArray *)postorderTraversal:(TreeNode *)root {
if (!root) {
return @[];
}
NSMutableArray *res = [NSMutableArray array];
NSMutableArray *stack = [NSMutableArray array];
[stack addObject:root];
while (stack.count > 0) {
root = stack.lastObject;
[stack removeLastObject];
[res insertObject:@(root.val) atIndex:0];
if (root.left) {
[stack addObject:root.left];
}
if (root.right) {
[stack addObject:root.right];
}
}
return res;
}
有序表折半查找
- (NSInteger)binarySearch:(NSArray *)arr target:(NSInteger)target {
NSInteger left = 0;
NSInteger right = arr.count - 1;
while (left <= right) {
NSInteger mid = left + (right - left) / 2;
if ([arr[mid] integerValue] == target) {
return mid;
} else if ([arr[mid] integerValue] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}