一直都不知道怎么写链表的插入排序,之后在网上找了一个例子。理解了之后复制了过来。希望大家共同进步吧。
#include "stdafx.h"
#include <iostream>
#include<stdio.h>
using namespace std;
#define MAX 8
struct student
{
int num;
student *next;
};
int* inserSort(int a[], int len);
student* CreateList();
student *InsertSort1(student *head);
student *InsertSort(student *head);
void sortlist(student * head);
int main(void)
{
student *pHead = CreateList();
InsertSort(pHead);
return 0;
}
//从大到小 (主要理解2处亮点)
student *InsertSort1(student *head)
{
student *pFirst = head->next;
head->next = NULL;//亮点1
student *p = NULL;
student *q = NULL;
student *t = NULL;
while(pFirst != NULL)
{
for(t = pFirst,q = head; (q != NULL && t->num < q->num); p = q, q++);//亮点2
pFirst = pFirst->next;
if(p == head)
{
head = t;
}
else
{
p->next =t;
}
t->next = p;
}
return head;
}
student* CreateList()
{
student *pHead = NULL;
student *pData = NULL;
FILE *file = fopen("user.txt", "r");
while(1)
{
student d;
if(fscanf(file,"%d",&d.num) == -1) break;
student *pTemp = new student;
pTemp->num = d.num;
pTemp->next = NULL;
if(pHead == NULL)
{
pHead = pTemp;
pData = pTemp;
}
else
{
pData->next = pTemp;
pData = pTemp;
}
}
return pHead;
}
int* inserSort(int a[], int len)
{
int key;
int j;
for(int i=1; i<len; i++)
{
key = a[i];
for(j = i; j >0 && a[j-1] > key; j--)
{
a[j] = a[j-1];
}
a[j]= key;
}
return a;
}