交换排序(冒泡排序,快速排序)

来源:互联网 发布:我知谁掌管明天歌谱 编辑:程序博客网 时间:2024/06/08 20:04
/*交换排序:冒泡排序,快速排序运行环境:VS2010*/#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>#define OK 1#define TRUE 1#define FALSE 0#define MAXSIZE 50typedef struct{int value;}RedType;typedef struct{RedType red[MAXSIZE+1];//red[0]用作哨兵单元int length;}SqList;SqList *CreateSqList(){int i = 0;int j = 0;char buf[4*MAXSIZE] = "";char *ptr = NULL;SqList *sqlist = (SqList *)malloc(sizeof(SqList));memset(sqlist, 0, sizeof(SqList));printf("请输入待排序数据,以逗号分隔,以分号结束\n""例:23,12,65,36,35;\n""input:");scanf("%s", buf);ptr = buf;sqlist->red[i].value = 0;//red[0]不存值用作哨兵单元i = 1;while(*ptr != ';'){sqlist->red[i].value = atoi(ptr);i++;ptr = strstr(ptr, ",");if(!ptr){break;}ptr++;}sqlist->length = (i - 1);return sqlist;}//冒泡排序int BubbleSort(SqList *sqlist){int i = 0;int j = 0;int change = TRUE;for(i = 1;  (change == TRUE)&&(i <= sqlist->length); i++){change = FALSE;for(j = 1; j <= sqlist->length - i + 1; j++){if(sqlist->red[j].value < sqlist->red[j-1].value){sqlist->red[0] = sqlist->red[j];sqlist->red[j] = sqlist->red[j-1];sqlist->red[j-1] = sqlist->red[0];change = TRUE;}}}return OK;}//快速排序的一趟交换过程int Partition(SqList *sqlist, int low, int high){int pivotkey = 0;sqlist->red[0] = sqlist->red[low];//顺序表的第一个记录做枢轴记录pivotkey = sqlist->red[low].value;//枢轴记录关键字while(low < high)//从表的两端向中间扫描{while((low < high) && (pivotkey <= sqlist->red[high].value)){high--;}sqlist->red[low] = sqlist->red[high];//将比枢轴记录小的记录移到低端while((low < high) && (pivotkey >= sqlist->red[low].value)){low++;}sqlist->red[high] = sqlist->red[low];//将比枢轴记录大的记录移到高端}sqlist->red[low] = sqlist->red[0];//枢轴记录到位return low;//返回枢轴的位置}//对顺序表的子表sqlist->red[low...high]做快速排序int QSort(SqList *sqlist, int low, int high){int pivotloc = 0;if(low < high)//这个是结束条件{pivotloc = Partition(sqlist, low, high);//将sqlist->red[low...high]一分为二QSort(sqlist, low, pivotloc - 1);//对高子表排序QSort(sqlist, pivotloc + 1, high);//对低子表排序}return OK;}//快速排序int QickSort(SqList *sqlist){QSort(sqlist, 1, sqlist->length);return OK;}//打印表中数据int PrintSqList(SqList sqlist){int i = 0;for(i = 1; i <= sqlist.length; i++){printf("%d,", sqlist.red[i].value);}printf("\b;\n");return OK;}int main(){SqList *sqlist = NULL;SqList *testSqList = NULL;sqlist = CreateSqList();testSqList = (SqList *)malloc(sizeof(SqList));printf("\n冒泡排序:\n");memcpy(testSqList, sqlist, sizeof(SqList));PrintSqList(*testSqList);BubbleSort(testSqList);PrintSqList(*testSqList);printf("\n快速排序:\n");memcpy(testSqList, sqlist, sizeof(SqList));PrintSqList(*testSqList);QickSort(testSqList);PrintSqList(*testSqList);free(testSqList);free(sqlist);system("pause");return 0;}

原创粉丝点击