在通讯录中对电话号码进行排序
时间: 2024-01-13 17:19:08 浏览: 46
您可以使用各种算法对电话号码进行排序,如冒泡排序、插入排序、快速排序、归并排序等。以下是一个示例使用Python的冒泡排序算法对电话号码进行排序的代码:
```python
def bubble_sort(numbers):
length = len(numbers)
for i in range(length - 1):
for j in range(length - 1 - i):
if numbers[j][1] > numbers[j + 1][1]:
numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
return numbers
# 示例电话号码
phone_numbers = [("John", "555-1234"), ("Jane", "555-5678"), ("Bob", "555-9999")]
# 对电话号码进行排序
sorted_numbers = bubble_sort(phone_numbers)
# 输出排序后的电话号码
print(sorted_numbers)
```
这个示例代码将会按照电话号码进行升序排序,输出结果为:
```
[('John', '555-1234'), ('Jane', '555-5678'), ('Bob', '555-9999')]
```
相关问题
单链表通讯录数据结构中插入一个按照号码排序功能
为了实现按照号码排序的功能,我们需要在插入新节点时,将它插入到正确的位置上。具体实现步骤如下:
1. 新建一个节点,存储待插入的联系人信息;
2. 遍历链表,找到第一个电话号码大于待插入联系人电话号码的节点,记为`prev_node`;
3. 将新节点的next指针指向`prev_node`的下一个节点;
4. 将`prev_node`的next指针指向新节点;
5. 更新链表大小。
以下是按照号码排序的单链表通讯录数据结构插入代码实现:
```c
void insert_by_phone(struct List* list, struct Contact contact) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = contact;
new_node->next = NULL;
struct Node* prev_node = NULL;
struct Node* curr_node = list->head;
while (curr_node != NULL && strcmp(curr_node->data.phone, contact.phone) < 0) {
prev_node = curr_node;
curr_node = curr_node->next;
}
if (prev_node == NULL) {
new_node->next = list->head;
list->head = new_node;
} else {
new_node->next = prev_node->next;
prev_node->next = new_node;
}
list->size++;
}
```
在此实现中,我们使用了`strcmp`函数来比较电话号码大小,如果返回值小于0,则表示第一个字符串小于第二个字符串,反之大于0;如果等于0,则表示两个字符串相等。利用这个信息,我们就可以找到正确的插入位置并插入新节点了。
通讯录排序
通讯录排序可以按照姓名、拼音、电话号码等多种方式进行。
以下是按照姓名首字母排序的示例代码:
```python
contacts = ['张三', '李四', '王五', '赵六', '钱七']
sorted_contacts = sorted(contacts, key=lambda x: x[0])
print(sorted_contacts)
```
输出结果:
```
['李四', '钱七', '张三', '赵六', '王五']
```
其中,`sorted()` 函数接受一个可迭代对象和一个 `key` 参数,`key` 参数指定排序时使用的函数,这里使用 `lambda` 表达式指定以姓名首字母作为排序依据。