7.4.1直接选择排序
#include <stdio.h> #define N 10 void print(int *arr, int n);//打印数组 void SelectSort(int *arr, int n);//直接选择排序 void main() { int arr[N] = { 9,8,7,6,5,4,3,2,1,0 }; print(arr, N);//打印数组 SelectSort(arr, N);//直接选择排序 print(arr, N); } void print(int *arr, int n)//打印数组 { int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf(" "); } void SelectSort(int *arr, int n)//直接选择排序 { int i, j; int min; int temp; for (i = 0; i < n - 1; i++)//做n-1趟排序 { min = i;//设min为第i趟排序中关键字最小的记录位置 for (j = i + 1; j < n; j++)//在[i...n]选择关键字最小的记录 { if (arr[j] < arr[min]) { min = j;//若有比arr[min]小的记录,记住该位置 } } if (min != i)//与第i个记录交换 { temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } }
不带头结点的单链表,链表头指针为head
#include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; }ListNode; void insert(ListNode *head, int x);//插入 void print(ListNode *head);//打印 void SelectSortList(ListNode *head);//直接选择排序法 void main() { ListNode *head = (ListNode *)malloc(sizeof(ListNode)); head->data = 3; head->next = NULL; insert(head, 2);//插入 insert(head, 1); print(head);//打印 SelectSortList(head);//直接选择排序法 print(head);//打印 } void insert(ListNode *head, int x)//插入 { ListNode *p = head; if (!p) { return; } while (p->next) { p = p->next; } ListNode *s = (ListNode *)malloc(sizeof(ListNode)); s->data = x; s->next = NULL; p->next = s; } void print(ListNode *head)//打印 { ListNode *p = head; while (p) { printf("%d ", p->data); p = p->next; } printf(" "); } void SelectSortList(ListNode *head)//直接选择排序法 { ListNode *p, *q, *r; int temp; p = head; while (p) { q = p; r = p->next; while (r) { if ((q->data) > (r->data)) { q = r; } r = r->next; } temp = p->data; p->data = q->data; q->data = temp; p = p->next; } }