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("\n");
}
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("\n");
}
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;
}
}