C语言:用递归的方式对数组排序
#include stdio.h
成都创新互联专业为企业提供桑植网站建设、桑植做网站、桑植网站设计、桑植网站制作等企业网站建设、网页设计与制作、桑植企业网站模板建站服务,十余年桑植做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
#define N 8
void selection_sort(int a[], int n) {
int i, t, imax = 0;
if(n 1) return;
for(i = 1; i n; ++i) {
if(a[imax] a[i])
imax = i;
}
if(imax != n - 1) {
t = a[n - 1];
a[n - 1] = a[imax];
a[imax] = t;
}
selection_sort(a, n - 1);
}
int main(void) {
int i, a[N] = {8,5,4,6,1,2,3,7};
printf("排序前:\n");
for(i = 0; i N; i++)
printf("%d ", a[i]);
printf("\n");
selection_sort(a, N);
printf("排序后:\n");
for(i = 0; i N; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
C语言:对输入的十个数进行从小到大排序
1、首先打开编辑软件,新建一个c程序空文件,引入标准库和主函数,定义一个QuickSort函数用来排序,下面首先编写排序函数的:
2、此处用到快速排序思想,通过一趟排序将要排序的数据分割成独立的两部分,即这里用i和j两个变量分割数据,然后一部分的所有数据都比另外一部分的所有数据都要小,接着对这两部分数据分别进行比较排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列:
3、接着编写主函数,主函数中定义一个数组,然后用scanf接受数组,用户输入10个数以后,会将数存在数组array中,然后调用上面处理排序的函数,函数的输入就是刚才输入的数,最后在把排序的结果输出即可:
4、最后编译运行,输入10个数,最后控制台输出了排序的结果,证明程序的逻辑是没有问题的。以上就是C语言输入10个数排序的演示:
C语言对数排序
设3个数分别等于a,b,c
1、先比较a,b大小,如果a大,则进行下一步继续比较,如果b大,则a,b的数值互换
2、同上这次是b,c比较大小
3、最后显示a,b,c
#include
"stdio.h"
main()
{
int
a,b,c,n,m,p;
scanf("%d%d%d",a,b,c);
if(ba)n=a,a=b,b=n;
if(ca)m=a,a=c,c=m;
if(cb)p=c,c=b,b=p;
printf("%d%d%d",a,b,c);
}
C语言利用递归实现插入排序,选择排序,快速排序,归并排序算法。 要求有注释 ! 谢谢各位大神!
//InsertionSort
void insertionSort(int a[], int size) {
int i, j, key;
for (i = 0; i size; i++) {
key = a[i];
j = i-1;
while (j = 0 key a[j]) { //把元素插入到之前的有序元组中
a[j+1] = a[j];
j--;
}
a[j+1] = key;
}
}
//MergeSort
void merge(int a[], int p, int q, int r) { //合并两个子元组
int i, j, k, n1, n2;
int *array1, *array2;
n1 = q - p + 1,
n2 = r - q;
array1 = (int *)calloc(n1+1, sizeof(int));
array2 = (int *)calloc(n2+1, sizeof(int));
if (array1 == NULL || array2 == NULL) {
printf("Error: calloc failed in concat\n");
exit(EXIT_FAILURE);
}
for(i = 0; i n1; i++)
array1[i] = a[p + i];
for(i = 0; i n2; i++)
array2[i] = a[q + 1 + i];
array1[n1] = MAXNUMBER;
array2[n2] = MAXNUMBER;
i = 0, j = 0;
for(k = p; k = r; k++)
if(array1[i] = array2[j])
a[k] = array1[i++];
else
a[k] = array2[j++];
free(array1);
free(array2);
}
void mergeSort(int a[], int p, int r) {//归并的递归调用
int q;
if (p r) {
q = (p+r)/2;
mergeSort(a,p,q);
mergeSort(a,q+1,r);
merge(a,p,q,r);
}
}
//QuickSort
int partition(int a[], int p, int r) {//快排的分组函数
int i, j, x, temp;
x = a[r];
i = p - 1;
for (j = p; j r; j++)
if (x a[j]) {
temp = a[++i];
a[i] = a[j];
a[j] = temp;
}
temp = a[++i];
a[i] = a[r];
a[r] = temp;
return i;
}
void quickSort(int a[], int p, int r) { //快排
int q;
if (p r) {
q = partition(a, p, r);
quickSort(a, p, q-1);
quickSort(a, q+1, r);
}
}
//随即版的quickSort
int randomPartition(int a[], int p, int r){
int i, temp;
i = rand();
while( i p || i r)
i = rand();
temp = a[i];
a[i] = a[r];
a[r] = temp;
return partition(a,p,r);
}
void randomQuickSort(int a[], int p, int r){
int q;
if(p r){
q = randomPartition(a,p,r);
randomQuickSort(a,p,q-1);
randomQuickSort(a,q+1,r);
}
}
//BubbleSort();//冒泡排序
void bubbleSort(int a[], int size) {
int i, j, temp;
for (i = size -1; i = 0; i--)
for (j = 0; j i; j++)
if (a[j] a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
C语言 递归实现顺序输出整数 要求实现一个函数,对一个整数进行按位顺序输出?
比如要执行printdigits(1234),则执行
printdigits(1234/10);
printf("%d\n",1234%10);
要先执行printdigits(1234/10),即printdigits(123),变成执行
printdigits(123/10);
printf("%d\n",123%10);
printf("%d\n",1234%10);
要先执行printdigits(123/10),即printdigits(12),变成执行
printdigits(12/10);
printf("%d\n",12%10);
printf("%d\n",123%10);
printf("%d\n",1234%10);
要先执行printdigits(12/10),即printdigits(1),变成执行
printf("%d\n",1);
printf("%d\n",12%10);
printf("%d\n",123%10);
printf("%d\n",1234%10);
以上依次执行打印:1 2 3 4
用c语言递归调用:对数组中10个整数按由小到大排序
#include stdio.h
int a[20];
void f(int n)
{
int i,t;
if(n10)
{
f(n+1);
t=a[n];
for(i=n+1;i=10;i++)
if(ta[i])
a[i-1]=a[i];
else
break;
a[i-1]=t;
}
}
int main()
{
int i;
for(i=1;i=10;i++)
scanf("%d",a[i]);
f(1);
for(i=1;i=10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
文章标题:c语言用递归函数对数排序 c语言递归排序算法
网站链接:http://cqwzjz.cn/article/hijjse.html