选择排序(假设递增排序)
每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置。
时间复杂度O(n^2),空间复杂度O(1)。下面的示例代码以带头结点的链表为存储结构:
#include<stdio.h> #include<stdlib.h> #define Elemtype double struct Node { Elemtype data; struct Node *next; }; void listsort(Node*h) { Node*p=h->next; while(p!=NULL) { Node*q=p; Node*k=p; Elemtype min=p->data; while(q!=NULL) { if(min>q->data) { min=q->data; k=q; } q=q->next; } Elemtype tmp=p->data; p->data=k->data; k->data=tmp; p=p->next; } } int main() { Node*h=(Node*)malloc(sizeof(Node)); h->next=NULL; for(int i=0;i<10;i++) { Node*p=(Node*)malloc(sizeof(Node)); scanf("%lf",&p->data); p->next=h->next; h->next=p; } listsort(h); Node*q=h->next; while(q!=NULL) { printf("%lf\n",q->data); q=q->next; } return 0; }
原文地址:http://blog.csdn.net/u010839382/article/details/39968685