链表排序(C语言)选择排序
生活随笔
收集整理的這篇文章主要介紹了
链表排序(C语言)选择排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //用到了time函數#define arraySize 10typedef int elemType;typedef struct List
{elemType elem;struct List *next;
}Node;//產生隨機數組
void createRandomArray(int array[])
{int i,number;srand((unsigned) time(NULL)); //用時間做種,每次產生隨機數不一樣for (i=0; i<arraySize; i++){array[i] = rand() % 101; //產生0-100的隨機數}
}//創建單鏈表
struct List *createList(int num,int arrayList[])
{Node *head,*p1,*p2;if((head=(Node*)malloc(sizeof(Node)))==NULL){printf("create error\r\n");exit(0);}head->elem=0;head->next=NULL;p1=head;int i;for(i=0;i<num;i++){if((p2=(Node*)malloc(sizeof(Node)))==NULL){printf("create error\r\n");exit(0);}p2->elem=arrayList[i];p2->next=NULL;p1->next=p2;p1=p2;}return head;
}//遍歷單鏈表
void displayList(Node *head)
{printf("遍歷鏈表:");Node *p1;if(head==NULL){printf("空鏈表\r\n");//exit(0);}else{for(p1=head->next;p1!=NULL;p1=p1->next){printf("%d\t",p1->elem);}printf("\r\n");}
}//判斷鏈表是否為空
bool isEmptyList(Node* head)
{return head==NULL;//||head->next==NULL;
}//鏈表排序 從小到大排 選擇排序
void sortList(Node* head)
{printf("------進行排序------\r\n");Node *p1,*p2,*p3,*temp;if((temp=(Node*)malloc(sizeof(Node)))==NULL){printf("sort create error");}p1=head;//int i=0,j=0;//調試for(p2=p1->next;p2->next!=NULL;p2=p2->next){for(p3=p2->next;p2!=NULL;p3=p3->next){if(p2->elem>p3->elem){temp->elem=p3->elem;p3->elem=p2->elem;p2->elem=temp->elem;}
// i++;
// printf("i:%d\t",i);if(p3->next==NULL)break;}
// j++;
// printf("j:%d\t",j);}
}int main()
{Node *head;elemType temp;int arrayList[arraySize];createRandomArray(arrayList);head=createList(arraySize,arrayList);printf("排序前\r\n");displayList(head);sortList(head);printf("排序后\r\n");displayList(head);return 0;
}
總結
以上是生活随笔為你收集整理的链表排序(C语言)选择排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冒泡排序 选择排序 快速排序(C语言)
- 下一篇: 二叉树(C语言)