用链表进行在线式排序的方法——最快、最有效率的排序方法,比楼上的冒泡排序快好几个数量级,楼上限100个数据,我的程序不限数据量(理论上可达2G个数据进行排序)#include #include #include struct LINK { int n; struct LINK * next;}; typedef struct LINK LNK;typedef struct LINK * PLNK;#define szLNK sizeof(struct LINK)void print(PLNK x){ PLNK y = x; while(y) {printf("%d ", y->n );y = y->next; } printf("\n");}int existed(PLNK root, int m){ PLNK y = root; while(y) {if (y->n == m) return 1;y = y->next; } return 0;}PLNK insert(PLNK root, int m, int (*cmp)(int, int)){ if(existed(root, m)) return root; PLNK x = (PLNK)malloc(szLNK); memset(x, 0, szLNK); x->n = m; if (!root) return x; PLNK y = root; if (cmp(m, y->n)) {x->next = y;return x; } while(y) {if (cmp(m, y->n)) { x->next = y->next; y->next = x; return root;}if (!y->next) break;y = y->next; } y->next = x; return root;}int greater(int a, int b) { return a>b; }int smaller(int a, int b) { return a#define MAX 100void swap(int*a,int*b){ int t=*a; *a=*b; *b=t;}int main(){ int i,j; int a[MAX]; int n; scanf("%d",&n); for(i=0;ia[j])swap(&a,&a[j]);} for(i=0;i<n;i++)printf("%d ",a); printf("\n"); return 0;}
|