赞
踩
利用顺序表进行排序,以下有三种比较简单的排序算法:简单选择排序、直接插入排序、冒泡排序,希望对你有所帮助哦~
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 1000 struct LNode{ int Data[MAXSIZE]; //Data为待排序序列数组 int Last; //Last为最后一个元素的数组下标 }; typedef struct LNode *List; List Create() { List L; L = (List)malloc(sizeof(struct LNode)); int i,j = 0,ch; printf("请输入需要处理的数字,按Ctrl+Z结束:\n"); while(scanf("%d",&ch)!=EOF) { L->Data[j] = ch; j++; } L->Last = j-1; return L; } //输出顺序表 void PrintList(List L) { int i; for(i=0;i <= L->Last;i++) { printf("Data[%d]=%d\n",i,L->Data[i]); } } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } //简单选择排序 void SimpleSelectionSort(List L) { int i,j,sum,k; for(i=0;i<L->Last;i++){ sum=L->Data[i]; k=i; for(j=i;j<=L->Last;j++){ if(sum>L->Data[j]){ sum=L->Data[j]; k=j; } } if(k!=i){ swap(&L->Data[i], &L->Data[k]); } } } //直接插入排序 void InsertionSort(List L) { int i,j,sum; for(i=1;i<=L->Last;i++){ sum=L->Data[i]; L->Data[i]=L->Data[i-1]; for(j=i-1;j>=-1;j--){ if(j==-1){ L->Data[j+1]=sum; break; } if(sum<L->Data[j]){ L->Data[j+1]=L->Data[j]; } else{ L->Data[j+1]=sum; break; } } } } //冒泡排序 void BubbleSort(List L) { int i,j; for(int i=0;i<L->Last-1;i++){ for(j=0;j<L->Last-i;j++){ if(L->Data[j+1] < L->Data[j]) swap(&L->Data[j+1], &L->Data[j]); } } } int main() { int n,i; List L = Create(); printf("所创建的顺序表为:\n"); PrintList(L); // //简单选择排序 // SimpleSelectionSort(L); // //直接插入排序 InsertionSort(L); //冒泡排序 // BubbleSort(L); printf("\n对未排序序列进行排序的结果为:"); for(i=0;i<=L->Last;i++) printf("%d ",L->Data[i]); return 0; } /* 99 66 45 33 37 10 22 13 85 12 59 36 62 43 94 7 35 52 44 44 12 59 36 62 43 94 7 35 52 85 */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。