C语言三个变量之间的怎么交换?四个呢、五个呢……n个呢?
- 提问者网友:凉末
- 2021-04-25 05:58
- 五星知识达人网友:夜风逐马
- 2021-04-25 07:06
3个:
t = a1;
a1 = a2;
a2 = a3;
a3 = t;
- 1楼网友:詩光轨車
- 2021-04-25 13:25
看看这个:
一.希尔(Shell)排序法
#include <stdio.h>
void sort(int v[],int n) { int gap,i,j,temp; for(gap=n/2;gap>0;gap /= 2) { for(i=gap;i<n;i++) { for(j=i-gap;(j >= 0) && (v[j] > v[j+gap]);j -= gap ) { temp=v[j]; v[j]=v[j+gap]; v[j+gap]=temp; } } } }
算法:请看【动画模拟演示】。
二.二分插入法
void HalfInsertSort(int a[], int len) { int i, j,temp; int low, high, mid; for (i=1; i<len; i++) { temp = a[i]; low = 0; high = i-1; while (low <= high) { mid = (low + high) / 2; if (a[mid] > temp) { high = mid-1; } else { low = mid+1; } } for (j=i-1; j>high; j--) { a[j+1] = a[j]; } a[high+1] = temp; } }
三.直接插入法
void InsertionSort(int input[],int len) { int i,j,temp; for (i = 1; i < len; i++) { temp = input[i]; for (j = i - 1;j>-1&&input[j] > temp ; j--) { input[j + 1] = input[j]; input[j] = temp; } } }
四.带哨兵的直接排序法
void InsertionSortWithPiquet(int input[],int len) { int i,j; for (i = 2; i < len; i++) { input[0] = input[i]; for (j = i - 1; input[j] > input[0] ; j--) { input[j + 1] = input[j]; input[j] = input[0]; } } }
五.冒泡法
void Bublesort(int a[],int n) { int i,j,k; for(j=0;j<n;j++) { for(i=0;i<n-j;i++) { if(a[i]>a[i+1]) { k=a[i]; a[i]=a[i+1]; a[i+1]=k; } } } }
六.选择排序法
void Selectsort(int A[],int n) { int i,j,min,temp; for(i=0;i<n;i++) { min=i; for(j=i+1;j<=n;j++) { if(A[min]>A[j]) { temp=A[i]; A[i]=A[j]; A[j]=temp; } } } }
七.快速排序
void Quick_sort(int data[],int low,int high) { int mid; if(low<high) { mid=Partition(data,low,high); Quick_sort(data,low,mid-1); Quick_sort(data,mid+1,high); } } int Partition(int data[],int low,int high) { int mid; data[0]=data[low]; mid=data[low]; while(low < high) { while((low < high) && (data[high] >= mid)) { --high; } data[low]=data[high]; while((low < high) && (data[low] < mid)) { ++low; } data[high]=data[low]; } data[low]=data[0]; return low; }
八.堆排序
void HeapAdjust(int data[],int s,int m) { int j,rc; rc=data[s]; for(j=2*s;j<=m;j*=2) { if(j<m && data[j]<data[j+1]) ++j; if(rc>data[j]) break; data[s]=data[j]; s=j; } data[s]=rc; }
void Heap_sort(int data[],int long_n) { int i,temp; for(i=long_n/2;i>0;--i) { HeapAdjust(data,i,long_n); } for(i=long_n;i>0;--i) { temp=data[1]; data[1]=data[i]; data[i]=temp; HeapAdjust(data,1,i-1); } }
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/wengwuzi/archive/2008/10/05/3017968.aspx
- 2楼网友:神鬼未生
- 2021-04-25 12:34
问题是你想怎么交换????
顺序换 两头换 中间到两头换 ???
n是确切的,还是随机的?
变量是哪种,是同种之间换,还是不同种之间换?
有要求吗?是一个变量只能换一次,还是没限制的?
具体你要什么结果?
还有为什么要换,你要处理什么问题,我很想知道。
???
- 3楼网友:猎心人
- 2021-04-25 11:15
- 4楼网友:爱难随人意
- 2021-04-25 09:54
- 5楼网友:渊鱼
- 2021-04-25 08:41