使用单链表的简单选择排序

单链表简单选择排序算法

单链表的存储结构和创建单链表

1、

单链表的结构:

typedef struct list
{
	int data;
	struct list * next;
}list,*linklist;

2、

单链表的创建:

void create(linklist &L,int n)
{
	int i;
	linklist p;
	L = (linklist)malloc(sizeof(list));
	L->next = NULL;
	for(i=0;i<n;i++)
	{
		p = (linklist)malloc(sizeof(list));
		scanf("%d",&p->data);
		p->next = L->next;
		L->next = p;
	}
}

3、

点链表的打印:

void show(linklist L)
{
	linklist p;
	p = L->next;
	while(p)
	{
		printf("%d\t",p->data);
		p = p->next;
	}
}

简单选择排序

简单选择排序步骤

简单选择排序:

1⃣️ 设待排序的记录放在数组r[1…n]中。第一趟从r[1]开始,通过n-1次比较,从n个记录中选出关键字中选出关键字最小的记录,记为r[k],交换r[1]和r[k]。*

2⃣️ 第二趟从r[2]开始,通过n-2次比较,从n-1个记录中选出关键字最小的记录,记为r[k],交换r[2]和r[k]。

3⃣️ 依次类推,第i趟从r[i]开始,通过n-i次比较,从n-i+1个记录中选出关键字最小的记录,记为r[k],交换r[2]和r[k]。

4⃣️ 经过n-1趟,排序完成。

简单选择排序思想

从头到尾进行扫描,找到最小的放在第一个位置,在从第二个位置进行第二次扫描,找到最小的,放在第二个位置,依次扫描,直到全部有序

用单链表实现简单选择排序

实现代码:

//
//  main.c
//  Sorting_algorithm_design_questions_01
//
//  Created by Neil Xie on 2020/4/11.
//  Copyright © 2020 Neil Xie. All rights reserved.
//

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 20

typedef struct{
    int key;
}RedType;

typedef struct{
    RedType r[Maxsize+1];
    int length;
}SqList;

typedef struct Node{
    int date;
    struct Node *next;
}node,*List;
//创建单链表

List creat_list(int n)
{
    int i=0;
    List head,L,temp;
    head=(List)malloc(sizeof(node));
    head->next=NULL;
    temp=head;
    for(;i<n;i++){
        L=(List)malloc(sizeof(node));
        L->next=NULL;
        printf("Please input the date:");
        scanf("%d",&L->date);
        temp->next=L;
        temp=L;
    }
    return head;
 }
 
List getmin(List L){//取得从指针L开始的链表中记录的最小值
    List min;
    min=L;
    while(L->next){
        if(min->date>(L->next->date)){
            min=L->next;
        }
        L=L->next;
    }
    
    return min;//返回较小值的指针
}

void selectsort(List head)//简单选择排序--单链表
{
    List j,i=head->next;
    int temp;
    for(;i->next!=NULL;i=i->next){
        j=getmin(i);
        if(i->date!=j->date){
            temp=i->date;
            i->date=j->date;
            j->date=temp;
        }
    }
}
//输出单链表

void printf_list(List head){
    List p=head->next;
    while(p){
        printf("%3d",p->date);
        p=p->next;
    }
}

int main(){
    List head;
    SqList L;
    L.length=10;
    int n;
    printf("___用单链表实现简单选择排序___\n\n");
    printf("请输入元素个数:");
            scanf("%d",&n);
            head=creat_list(n);
            printf_list(head);
            printf("\n");
            selectsort(head);
            printf_list(head);
            printf("\n");
    
    return 0;
}

代码运行结果

___用单链表实现简单选择排序___

请输入元素个数:5
Please input the date:45
Please input the date:23
Please input the date:74
Please input the date:18
Please input the date:9
 45 23 74 18  9
  9 18 23 45 74
Program ended with exit code: 0
发布了4 篇原创文章 · 获赞 1 · 访问量 37

猜你喜欢

转载自blog.csdn.net/weixin_43823538/article/details/105456805