程序博客网 > 电脑如何复制淘宝链接
来源:互联网 发布:电脑如何复制淘宝链接 编辑:程序博客网 时间:2024/05/21 17:46
#include <stdio.h>#include <string.h>#define MAX_SIZE 100void exch(int *a,int *b){int t =*a;*a = *b;*b = t;}void compexch (int *a,int *b){if(*b < *a)exch(a,b);}/******************冒泡排序****************每次将最小值放到相应的位置******************************************/void bubble(int a[],int l,int r){int i,j,flag=1;/*flag =0,说明内部已经排好序了,中断外部循环*/for( i=0;i<r && flag == 1;i++){flag = 0;for( j=r;j>i;j--)/*compexch(&a[j-1],&a[j]);*/{if(a[j]<a[j-1]){int temp = a[j];a[j] = a[j-1];a[j-1] = temp;flag =1;}}}}/******************选择排序*************************** 交换次数最少,但与文件是否排好序关系不大*每次都选择出未排序的最小值放在未排序的数组最低位。****************************************************/void selection(int a[],int l,int r){int i,j,min;for(i=l;i<r;i++){min = i;for(j=i+1;j<=r;j++)if(a[j]<a[min])min=j;exch(&a[i],&a[min]);}}/*****************插入排序***************************移动比较多:方法,将较大的数1个个向右移动一位*避免较多无用的交换 ****************************************************/void insertion(int a[],int l,int r){int i,j,v;for(i=r;i>l;i--)/*先找出最小值并将其放在数组最前端,作为标志字用*/compexch(&a[i-1],&a[i]);for(i=l+2;i<=r;i++){j =i; v = a[i];while(v < a[j-1]){a[j]=a[j-1];j--;}a[j] = v;}}/*****************快速排序***************************快速排序的基本思想是:通过一躺排序将要排序的数据分割*成独立的两部分,其中一部分的*所有数据都比另外一不部分的所有数据都要小,然后再对这*两部分数据分别进行快速排序,整个排序过程可以递归或者*非递归进行,以此达到整个数据变成有序序列。****************************************************/void QuickSort(int a[],int left,int right)/*递归实现*/ { int i,j,x,temp; i = left; j = right; x = a[(left+right)/2]; /*num 的选择也很重要,一般应该随机选择,最好是能够为待排数据的中间值*/ do { while((a[i] < x) && (i<right)) i++; while((a[j] > x) && (j>left)) j--; if(i<=j) { temp = a[i]; a[i] = a[j]; a[j] = temp; i++; j--; } }while(i<i); if(left<j ) QuickSort(a,left,j); if(i<right) QuickSort(a,i,right); }int main(void){int i,n,alg,data[MAX_SIZE]={0};printf("how many numbers that you want to sort? : ");scanf("%d",&n);while(n>100){ printf("the max size of this program can sort is %d,input the number again!/n",MAX_SIZE); scanf("%d",&n);}printf("please input the data you want to sort,input 'ctrl + z' to end:/n");for(i=0;i<n;i++)scanf("%d",&data[i]);printf("select the algorithms:/n/1---bubble sort/n/2---select sort/n/3---select sort/n/4---quick sort/n"); fflush(stdin);scanf("%d",&alg);switch(alg){case 1:bubble(data,0,n-1); break;case 2:selection(data,0,n-1); break;case 3:insertion(data,0,n-1); break;case 4:QuickSort(data,0,n-1); break;default:printf("unknow algortthm!/n");}printf("ata after sort:/n");for(i=0;i<n;i++)printf("%d/t",data[i]);printf("PRESS ANT KEY TO EXIT!/n");getchar();getchar();return 0;}