int find_key(int arr[],int low,int high) { int key; key=arr[low]; int tempdata; while(low<high) { while(low<high && arr[high]>key) high--; swapdata(low,high); while(low<high && arr[low]<key) low++; swapdata(low,high); } return low; }
int bubble_rank1(int arr[],int length) { int i,j; for(i=0;i<length;i++) { for(j=i+1;j<length;j++)//与i后面所有的数组元素进行相比,找出其中最小的元素 { if(arr[i]>arr[j]) swapdata(arr,i,j); } } return 1; }
int main(void) { int x, y; printf("请输入x, y:"); scanf("%d,%d", &x, &y); printf("交换数据前: x= %d, y= %d \n", x, y); swapdata(x, y); printf("交换后:x = %d, y = %d \n", x, y); return 0; }
void heapsort(int arr[],int length) { int i; int end; end = length-1; for(i=end/2;i>=0;i--) heapcreat(arr,i,end); for(i=end;i>0;i--) { swapdata(arr,0,i); heapcreat(arr,0,i-1); } }
int selectsort(int arr[],int length) { int i,j; int minflag; //设置最小元素的标记位 for(i=0;i<length;i++) { minflag=i; //标记为当前的i for(j=i+1;j<length;j++) { if(arr[minflag]>arr[j]) //寻找最小的元素 minflag=j; //设置最小标记位 } if(i!=minflag) //最小标记位是否发生改变 swapdata(arr,i,minflag); } return 1; }
int bubble_rank2(int arr[],int length) { int i,j; int flag=2;//设置的标记位,并且初始化为2 for(i=0;i<length && flag;i++)//若flag=0,则不进行遍历,这样可以减少比较有序的数列的遍历次数 { //比如2,1,3,4,5,6,7,8。仅仅遍历一次可以得到结果,避免后面的不必要的遍历 flag=0; //flag为0,表示数列未进行遍历,此处的i往后的元素均是有序的 for(j=length-2;j>=i;j--) { if(arr[j]>arr[j+1]) //倒序寻找最小的元素 { swapdata(arr,j,j+1); flag=1; //标记数列进行过变动 } } } return 1; }