C语言的四种排序

合集下载

C语言数组的五种简单排序,选择法排序,冒泡法排序、交换法排序、插入法排序、折半法排序

C语言数组的五种简单排序,选择法排序,冒泡法排序、交换法排序、插入法排序、折半法排序

C语⾔数组的五种简单排序,选择法排序,冒泡法排序、交换法排序、插⼊法排序、折半法排序⽂章⽬录1、选择法排序选择法排序是指每次选择索要排序的数组中的最⼩值(这⾥是由⼩到⼤排序,如果是由⼤到⼩排序则需要选择最⼤值)的数组元素,将这些数组元素的值与前⾯没有进⾏排序的数组元素值进⾏互换代码实现需要注意的是:声明⼀个数组和两个整形变量,数组⽤于存储输⼊的数字,⽽整形变量⽤于存储最⼩的数组元素的数值与该元素的位置,在我的代码中实现为a[] temp position。

代码具体如下#include<stdio.h>int main(){int m,n,k;printf("please input the length of the array:");scanf("%d",&k);int a[k];int temp;int position;printf("please input the number of the array:\n");for(m=0;m<k;m++){printf("a[%d]=",m+1);scanf("%d",&a[m]);}/*从⼩到⼤排序*/for(m=0;m<k-1;m++){temp=a[m]; //设置当前的值为最⼩值position=m; //记录当前的位置for(n=m+1;n<k;n++){if(a[n]<temp){temp=a[n]; //如果找到⽐当前的还要⼩的数值,则更换最⼩的数值与位置position=n;}}a[position]=a[m];a[m]=temp;}for(m=0;m<k;m++){printf("%d\t",a[m]);}return 0;}结果如下2、冒泡法排序冒泡法排序就是值在排序时,每次⽐较数组中相邻的两个数组元素的值,将⽐较⼩的(从⼩到⼤排序算法,如果是从⼤到⼩排序算法就是将较⼤的数排在较⼩的数前⾯)排在⽐较⼤的前⾯在代码实现的过程中:声明⼀个数组与⼀个整型变量,数组⽤于存放数据元素,整型变量⽤于交换时作为中间变量。

c语言中排序的各种方法解析

c语言中排序的各种方法解析

c语言中排序的各种方法解析一、引言在计算机编程中,排序是一个重要的操作,它按照一定的顺序排列数据元素,使得数据元素按照从小到大的顺序排列。

在C语言中,有多种方法可以实现排序,包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。

这些排序算法都有各自的优缺点,适合不同的应用场景。

二、冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

算法步骤:1. 比较相邻的元素。

如果第一个比第二个大(升序),就交换它们两个。

2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。

这步做完后,最后的元素会是最大的数。

3. 针对所有的元素重复以上的步骤,除了最后一个。

4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

三、选择排序选择排序是一种简单直观的排序算法。

它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

算法步骤:1. 在未排序序列中找到最小元素,存放到排序序列的起始位置。

2. 再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。

3. 以此类推,直到所有元素均排序完毕。

四、插入排序插入排序的工作方式是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序在实现上通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

五、快速排序快速排序使用了分治的原则,它在每一层划分都比前面方法有所改进和精进,当切分到两边的子序列长度都大于某个值时,或者一个大于一个小于这个值时再进行交换的操作来结束此层的递归过程。

这层的结果又成为下一层的两个子数组来处理,最后就得到递归式的最终结果。

数组排序c语言数组排序方法

数组排序c语言数组排序方法

数组排序c语言数组排序方法在C语言中,可以使用多种排序算法对数组进行排序。

常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。

下面将详细介绍这些排序算法的原理、实现以及时间复杂度。

1. 冒泡排序(Bubble Sort):冒泡排序是一种简单的排序算法,其基本思想是重复地在相邻的元素之间进行比较和交换,将最大的元素逐渐“浮”到数组的尾部。

具体实现过程如下:cvoid bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-1-i; j++) {if (arr[j] > arr[j+1]) {交换相邻元素int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}冒泡排序的时间复杂度为O(n^2),其中n为数组长度。

2. 选择排序(Selection Sort):选择排序也是一种简单的排序算法,其基本思想是每次从未排序的部分中选取最小(或最大)的元素,放到已排序部分的末尾。

具体实现过程如下:cvoid selectionSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {int minIndex = i;for (int j = i+1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}将最小元素交换到已排序部分的末尾int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}选择排序的时间复杂度为O(n^2)。

3. 插入排序(Insertion Sort):插入排序的基本思想是将数组分为已排序和未排序两部分,每次从未排序部分选择一个元素,插入到已排序部分的正确位置。

使用C语言实现12种排序方法

使用C语言实现12种排序方法

使⽤C语⾔实现12种排序⽅法⽬录1.冒泡排序2.插⼊排序3.折半插⼊排序4.希尔排序5.选择排序6.鸡尾酒排序7.堆排序8.快速排序9.归并排序10.计数排序11.桶排序12.基数排序1.冒泡排序思路:⽐较相邻的两个数字,如果前⼀个数字⼤,那么就交换两个数字,直到有序。

时间复杂度O(n^2),稳定性:这是⼀种稳定的算法。

代码实现:void bubble_sort(int arr[],size_t len){size_t i,j;for(i=0;i<len;i++){bool hasSwap = false; //优化,判断数组是否已经有序,如果有序可以提前退出循环for(j=1;j<len-i;j++){ //这⾥j<len-i是因为最后⾯的肯定都是最⼤的,不需要多进⾏⽐较if(arr[j-1]>arr[j]){ //如果前⼀个⽐后⼀个⼤swap(&arr[j-1],&arr[j]); //交换两个数据hasSwap = true;}}if(!hasSwap){break;}}}2.插⼊排序思路:把⼀个数字插⼊⼀个有序的序列中,使之仍然保持有序,如对于需要我们进⾏排序的数组,我们可以使它的前i个数字有序,然后再插⼊i+1个数字,插⼊到合适的位置使之仍然保持有序,直到所有的数字有序。

时间复杂度:O(n^2) 稳定性:稳定的算法代码实现:void insert_sort(int arr[],int len){int i,j;for(i=1;i<len;i++){int key = arr[i]; //记录当前需要插⼊的数据for(j= i-1;i>=0&&arr[j]>key;j--){ //找到插⼊的位置arr[j+1] = arr[j]; //把需要插⼊的元素后⾯的元素往后移}arr[j+1] = key; //插⼊该元素}}3.折半插⼊排序思路:本质上是插⼊排序,但是通过半分查找法找到插⼊的位置,让效率稍微快⼀点。

c语言中优先级顺序表

c语言中优先级顺序表

c语言中优先级顺序表
C语言中优先级顺序:
1、括号(( ) ):在C语言中,括号具有最高优先级,符号前后的优先级也是一样的;
2、先乘法/除法(*,/):先乘法再除法的优先级高于+-,留意乘除的关系;
3、加法/减法(+,-):加法减法的优先级就相对低一些,但是对于负数来说先计算会更明晰些;
4、左移位(<<)右移位(>>):C语言中左移位右移位的优先级是和乘除/加减平级的,且比其低;
5、关系运算符(>,<,>=,<=,==,!=):C语言中关系运算符的优先级还比较高,且等于号的优先级比最高;
6、位运算符(&,|,^):在C语言中位运算符的优先级位于关系运算符之下,就比上面的低一个级别;
7、逻辑与(&&)及逻辑或(||):C语言中逻辑与及逻辑或的优先级最低,且优先级大小一样。

c语言不同排序方式

c语言不同排序方式

c语言不同排序方式
C语言中常见的排序方式有以下几种:
1.冒泡排序:这是一种简单的排序算法,通过不断地比较相邻的两个元素并
交换它们(如果需要),使得较大的元素逐渐地移动到数组的末尾。

2.选择排序:这种排序算法首先找到数组中的最小元素,将其放到数组的开
头,然后找到次小的元素,将其放到数组的第二个位置,以此类推,直到整个数组排序完成。

3.插入排序:这种排序算法通过将一个元素插入到已经排好序的数组中的适
当位置,使得该数组仍然保持有序。

4.快速排序:这是一种分而治之的排序算法,首先选择一个元素作为"pivot",
然后将所有比pivot小的元素移到它的左边,所有比pivot大的元素移到它的右边,然后再对左右两部分进行同样的操作。

5.归并排序:这也是一种分而治之的排序算法,它将一个大列表分成两个较
小的子列表,然后递归地对子列表进行排序,最后将排序好的子列表合并成一个有序的列表。

以上是C语言中常见的几种排序算法的概述,其中具体代码实现会有一定的复杂性,需要在掌握一定的C语言知识的基础上才能完成。

每种排序方式都有其特定的应用场景和优缺点,在实际使用时需要根据具体需求进行选择。

c语言实现简单排序(8种方法)

c语言实现简单排序(8种方法)

#include<stdio.h>#include<stdlib.h>//冒泡排序voidbubleSort(int data[], int n);//快速排序voidquickSort(int data[], int low, int high); intfindPos(int data[], int low, int high);//插入排序voidbInsertSort(int data[], int n);//希尔排序voidshellSort(int data[], int n);//选择排序voidselectSort(int data[], int n);//堆排序voidheapSort(int data[], int n);void swap(int data[], inti, int j);voidheapAdjust(int data[], inti, int n);//归并排序voidmergeSort(int data[], int first, int last);void merge(int data[], int low, int mid, int high); //基数排序voidradixSort(int data[], int n);intgetNumPos(intnum, intpos);int main() {int data[10] = {43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; inti;printf("原先数组:");for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");/*printf("冒泡排序:");bubleSort(data, 10);for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");printf("快速排序:");quickSort(data, 0, 9);for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");printf("插入排序:");bInsertSort(data,10);for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");printf("希尔排序:");shellSort(data, 10);for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");printf("选择排序:");selectSort(data, 10);for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");int data[11] = {-1, 43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; inti;printf("原先数组:");int data[11] = {-1, 43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; for(i=1;i<11;i++) {printf("%d ", data[i]);}printf("\n");printf(" 堆排序:");heapSort(data, 10);for(i=1;i<11;i++) {printf("%d ", data[i]);}printf("\n");printf("归并排序:");mergeSort(data, 0, 9);for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");*/printf("基数排序:");radixSort(data, 10);for(i=0;i<10;i++) {printf("%d ", data[i]);}printf("\n");return 0;}/*--------------------冒泡排序---------------------*/ voidbubleSort(int data[], int n) {inti,j,temp;//两个for循环,每次取出一个元素跟数组的其他元素比较//将最大的元素排到最后。

C语言的四种程序结构

C语言的四种程序结构

C语言的四种程序结构C语言具有以下四种程序结构:1.顺序结构:顺序结构是指按照程序的顺序依次执行语句的结构。

C语言程序中,语句是按照它们在源代码中出现的顺序被执行的。

例如,以下是一个简单的顺序结构的示例:```c#include <stdio.h>int maiint num1 = 5;int num2 = 10;int sum = num1 + num2;printf("The sum of %d and %d is %d", num1, num2, sum);return 0;```上述例子中,程序按照从上到下的顺序依次执行,首先定义了两个整数变量`num1`和`num2`,然后计算它们的和,并将结果存储在变量`sum`中,最后通过`printf`函数打印出结果。

2.分支结构:分支结构是通过条件来决定程序执行路径的结构。

根据条件表达式的真假,程序将决定执行哪个分支。

C语言中的分支结构通常使用if-else和switch语句来实现。

以下是一个使用if-else语句的分支结构的示例:```c#include <stdio.h>int maiint num = 10;if (num > 0)printf("Number is positive");} elseprintf("Number is negative");}return 0;```上述例子中,程序根据变量`num`的值决定执行哪个分支。

如果`num`大于0,将打印"Number is positive";否则,将打印"Number is negative"。

3.循环结构:循环结构是一个重复执行其中一段代码的结构。

在C语言中,循环结构可以使用for、while和do-while语句来实现。

以下是一个使用for循环的示例:```c#include <stdio.h>int maiint i;for (i = 0; i < 5; i++)printf("%d\n", i);}return 0;```上述例子中,循环执行了5次,每次循环打印变量`i`的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单选择排序/*对整型数组的元素进行简单选择排序(源程序的整型简单选择排序)*/ #include<stdio.h>#include<conio.h>#define N 6void taxis(int b[],int k){int i,j,temp;for(i=0;i<k-1;i++)for(j=i+1;j<k;j++)if(b[i]>b[j]){temp=b[i];b[i]=b[j];b[j]=temp;}}void main(){int a[N]={9,8,5,6,2,0},i;clrscr();taxis(a,N);for(i=0;i<N;i++){printf("%d",a[i]);if(i<N-1)printf(",");}}/*对整型数组的元素进行简单选择排序(源程序的整型排序-指针))*/#include<stdio.h>#include<conio.h>#define N 6void taxis(int *p1,int k){int temp,*p2,*p3;for(p2=p1;p2<p1+k-1;p2++)for(p3=p2+1;p3<p1+k;p3++)if(*p2>*p3){temp=*p2;*p2=*p3;*p3=temp;}}void main(){int a[N]={9,8,5,6,2,0},*p;clrscr();taxis(a,N);for(p=a;p<a+N;p++)printf("%d",*p);if(p<a+N-1)printf(",");}}/*将字符串按其的长度(字母对应的ASCⅡ值由小到大)进行简单选择排序(源程序的字符串长度排序)*/ #include<stdio.h>#include<string.h>#include<conio.h>#define N 5void taxis(char *p1[],int k){int i,j;char *temp;for(i=0;i<k-1;i++)for(j=i+1;j<k;j++)if(strlen(p1[i])>strlen(p1[j])){temp=p1[i];p1[i]=p1[j];p1[j]=temp;}}void main(){char *a[]={"Follow","BASIC","Great","FORTRAN","Computer"};int i;clrscr();taxis(a,N);printf("The result of taxis is:\n");for(i=0;i<N;i++)printf("%s\n",a[i]);}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行简单选择排序(源程序的字符串顺序排序)*/ #include<stdio.h>#include<string.h>#include<conio.h>#define N 5void taxis(char *p1[],int k){int i,j;char *temp;for(i=0;i<k-1;i++)for(j=i+1;j<k;j++)if(strcmp(p1[i],p1[j])>0){temp=p1[i];p1[i]=p1[j];p1[j]=temp;}}{char *a[]={"Follow","BASIC","Great","FORTRAN","Computer"};int i;clrscr();taxis(a,N);for(i=0;i<N;i++)printf("%s\n",a[i]);}/*将整型数组的元素进行简单选择排序(终端输入的整型排序),如果连续出现3个为0的数据,*//*则默认判断这3个为0的数据无效以和其后面是没有数据,*//*即不输出这3个为0的数据以和其后面的数据(元素来自终端)*/#include<stdio.h>#include<conio.h>#define N 50void taxis(int b[],int k){int i,j,temp;for(i=0;i<k-1;i++)for(j=i+1;j<k;j++)if(b[i]>b[j]){if(b[j]==0&&b[j+1]==0&&b[j+2]==0)break;else{temp=b[i];b[i]=b[j];b[j]=temp;}}}void main(){int a[N]={0},i;clrscr();printf("please input no more than %d int datas:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);taxis(a,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){printf("%d",a[i]);if(a[i+1]==0&&a[i+2]==0&&a[i+3]==0)break;printf(",");}}/*将整型数组的元素进行简单选择排序(终端输入的整型排序-指针),如果连续出现3个为0的数据,*/ /*则默认判断这3个为0的数据以和其后面是没有数据,*//*即不输出这3个为0的数据以和其后面的数据(元素来自终端)*/#include<stdio.h>#include<conio.h>#define N 50void taxis(int *p1,int k){int temp,*p2,*p3;for(p2=p1;p2<p1+k-1;p2++)for(p3=p2+1;p3<p1+k;p3++)if(*p2>*p3){if(*p3==0&&*(p3+1)==0&&*(p3+2)==0)break;else{temp=*p2;*p2=*p3;*p3=temp;}}}void main(){int a[N]={0},*p;clrscr();printf("please input no more than %d int datas:\n",N);for(p=a;p<a+N;p++)scanf("%d",p);taxis(a,N);printf("The result of is:\n");for(p=a;p<a+N;p++){printf("%d",*p);if(*(p+1)==0&&*(p+2)==0&&*(p+3)==0)break;printf(",");}}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行简单选择排序(终端输入的字符串顺序排序)*/ /*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#include<stdio.h>#include<string.h>#include<conio.h>#define N 50#define size 15void taxis(char *p1[],int k){int i,j;char *temp;for(i=0;i<N;i++)for(j=i+1;j<k;j++)if(strlen(p1[i])>strlen(p1[j])&&strlen(p1[j])!=0){temp=p1[i];p1[i]=p1[j];p1[j]=temp;}}void main(){ char a[size]={0},*p[N]={0};int i;clrscr();printf("Please input no more than %d strings\n",N);for(i=0;i<N;i++){gets(a);if(strlen(a)==0)break;p[i]=(char*)calloc(sizeof(a),sizeof(char));strcpy(p[i],a);}taxis(p,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){if(strlen(p[i])==0)break;printf("%s\n",p[i]);}}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行简单选择排序(终端输入的字符串顺序排序)*/ /*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#include<stdio.h>#include<string.h>#include<conio.h>#define N 50#define size 15void taxis(char *p1[],int k){int i,j;char *temp;for(i=0;i<k;i++)for(j=i+1;j<k;j++)if(strcmp(p1[i],p1[j])>0&&strlen(p1[j])!=0){temp=p1[i];p1[i]=p1[j];p1[j]=temp;}}void main(){ char a[size]={0},*p[N]={0};int i;clrscr();printf("Please input no more than %d strings\n",N);for(i=0;i<N;i++){gets(a);if(strlen(a)==0)break;p[i]=(char*)calloc(sizeof(a),sizeof(char));strcpy(p[i],a);}taxis(p,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){if(strlen(p[i])==0)break;printf("%s\n",p[i]);}}选择排序/*对整型数组的元素进行选择排序(源程序的整型排序)*/ #include<stdio.h>#include<conio.h>#define N 6void taxis(int b[],int k){int i,j,n,temp;for(i=0;i<k-1;i++){n=i;for(j=i+1;j<k;j++)if(b[n]>b[j])n=j;if(n!=i){temp=b[i];b[i]=b[n];b[n]=temp;}}}void main(){int a[N]={9,8,5,6,2,0},i;clrscr();taxis(a,N);for(i=0;i<N;i++){printf("%d",a[i]);if(i<N-1)printf(",");}}/*对整型数组的元素进行选择排序(源程序的整型排序-指针))*/#include<stdio.h>#include<conio.h>#define N 6void taxis(int *p1,int k){int i,temp,*p2,*p3;for(i=0;i<k-1;i++){p2=p1+i;for(p3=p1+i+1;p3<p1+k;p3++)if(*p2>*p3)p2=p3;if(p2!=p1+i){temp=*(p1+i);*(p1+i)=*p2;*p2=temp;}}}void main(){int a[N]={9,8,5,6,2,0},*p;clrscr();taxis(a,N);for(p=a;p<a+N;p++){printf("%d",*p);if(p<a+N-1)printf(",");}}/*将字符串按其的长度(字母对应的ASCⅡ值由小到大)进行选择排序(源程序的字符串长度排序)*/ #include<stdio.h>#include<string.h>#include<conio.h>#define N 5void taxis(char **p1,int k){int i;char **p2,**p3,**temp;for(i=0;i<k-1;i++){p2=p1+i;for(p3=p1+i+1;p3<p1+k;p3++)if(strlen(*p2)>strlen(*p3))p2=p3;if(p2!=p1+i){*temp=*(p1+i);*(p1+i)=*p2;*p2=*temp;}}}void main(){char *a[]={"Follow","BASIC","Great","FORTRAN","Computer"};int i;clrscr();taxis(a,N);printf("The result of taxis is:\n");for(i=0;i<N;i++)printf("%s\n",a[i]);}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行选择排序(源程序的字符串顺序排序)*/ #include<stdio.h>#include<string.h>#include<conio.h>#define N 5void taxis(char **p1,int k){int i;char **p2,**p3,**temp;for(i=0;i<k-1;i++){p2=p1+i;for(p3=p1+i+1;p3<p1+k;p3++)if(strcmp(*p2,*p3)>0)p2=p3;if(p2!=p1+i){*temp=*(p1+i);*(p1+i)=*p2;*p2=*temp;}}}void main(){char *a[]={"Follow","BASIC","Great","FORTRAN","Computer"};int i;clrscr();taxis(a,N);for(i=0;i<N;i++)printf("%s\n",a[i]);}/*将整型数组的元素进行选择排序(终端输入的整型排序),如果连续出现3个为0的数据,*//*则默认判断这3个为0的数据无效以和其后面是没有数据,*//*即不输出这3个为0的数据以和其后面的数据(元素来自终端)*/#include<stdio.h>#include<conio.h>#define N 10void taxis(int b[],int k){int i,j,n,temp;for(i=0;i<k-1;i++){n=i;for(j=i+1;j<k;j++)if(b[n]>b[j]){if(b[j]==0&&b[j+1]==0&&b[j+2]==0)break;elsen=j;}if(n!=i){temp=b[i];b[i]=b[n];b[n]=temp;}}}void main(){int a[N]={0},i;clrscr();printf("please input no more than %d int datas:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);taxis(a,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){printf("%d",a[i]);if(a[i+1]==0&&a[i+2]==0&&a[i+3]==0)break;printf(",");}}/*将整型数组的元素进行选择排序(终端输入的整型排序-指针),如果连续出现3个为0的数据,*/ /*则默认判断这3个为0的数据以和其后面是没有数据,*//*即不输出这3个为0的数据以和其后面的数据(元素来自终端)*/#include<stdio.h>#include<conio.h>#define N 50void taxis(int *p1,int k){int i,temp,*p2,*p3;for(i=0;i<k-1;i++){p2=p1+i;for(p3=p1+i+1;p3<p1+k;p3++)if(*p2>*p3){if(*p3==0&&*(p3+1)==0&&*(p3+2)==0)break;elsep2=p3;}if(p2!=p1+i){temp=*(p1+i);*(p1+i)=*p2;*p2=temp;}}}void main(){int a[N]={0},*p;clrscr();printf("please input no more than %d int datas:\n",N);for(p=a;p<a+N;p++)scanf("%d",p);taxis(a,N);printf("The result of is:\n");for(p=a;p<a+N;p++){printf("%d",*p);if(*(p+1)==0&&*(p+2)==0&&*(p+3)==0)break;printf(",");}}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行选择排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#include<stdio.h>#include<string.h>#include<conio.h>#define N 50#define size 15void taxis(char **p1,int k){int i;char **p2,**p3,**temp;for(i=0;i<k;i++){p2=p1+i;for(p3=p1+i+1;p3<p1+k;p3++)if(strlen(*p2)>strlen(*p3)&&strlen(*p3)!=0)if(p2!=p1+i){*temp=*(p1+i);*(p1+i)=*p2;*p2=*temp;}}}void main(){ char a[size]={0},*p[N]={0};int i;clrscr();printf("Please input no more than %d strings\n",N);for(i=0;i<N;i++){gets(a);if(strlen(a)==0)break;p[i]=(char*)calloc(sizeof(a),sizeof(char));strcpy(p[i],a);}taxis(p,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){if(strlen(p[i])==0)break;printf("%s\n",p[i]);}}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行选择排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#include<stdio.h>#include<string.h>#include<conio.h>#define N 50#define size 15void taxis(char **p1,int k){int i;char **p2,**p3,**temp;for(i=0;i<k;i++){p2=p1+i;for(p3=p1+i+1;p3<p1+k;p3++)if(strcmp(*p2,*p3)>0&&strlen(*p3)!=0)p2=p3;if(p2!=p1+i){*temp=*(p1+i);*p2=*temp;}}}void main(){ char a[size]={0},*p[N]={0};int i;clrscr();printf("Please input no more than %d strings\n",N);for(i=0;i<N;i++){gets(a);if(strlen(a)==0)break;p[i]=(char*)calloc(sizeof(a),sizeof(char));strcpy(p[i],a);}taxis(p,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){if(strlen(p[i])==0)break;printf("%s\n",p[i]);}}起泡排序/*对整型数组的元素进行起泡排序(源程序的整型排序)*/ #include<stdio.h>#include<conio.h>#define N 6void taxis(int b[],int k){int i,j,temp;for(i=0;i<k-1;i++)for(j=0;j<k-1-i;j++)if(b[j]>b[j+1]){temp=b[j];b[j]=b[j+1];b[j+1]=temp;}}void main(){int a[N]={9,8,5,6,2,0},i;clrscr();taxis(a,N);for(i=0;i<N;i++){printf("%d",a[i]);if(i<N-1)printf(",");}}/*对整型数组的元素进行起泡排序(源程序的整型排序-指针))*/#include<stdio.h>#include<conio.h>#define N 6void taxis(int *p1,int k){int i,temp,*p2;for(i=0;i<k-1;i++){for(p2=p1;p2<p1+k-1-i;p2++)if(*p2>*(p2+1)){temp=*p2;*p2=*(p2+1);*(p2+1)=temp;}}}void main(){int a[N]={9,8,5,6,2,0},*p;clrscr();taxis(a,N);for(p=a;p<a+N;p++){printf("%d",*p);if(p<a+N-1)printf(",");}}/*将字符串按其的长度(字母对应的ASCⅡ值由小到大)进行起泡排序(源程序的字符串长度排序)*/ #include<stdio.h>#include<string.h>#include<conio.h>#define N 5void taxis(char **p1,int k){int i;char **p2,**temp;for(i=0;i<k-1;i++)for(p2=p1;p2<p1+k-1-i;p2++)if(strlen(*p2)>strlen(*(p2+1))){*temp=*p2;*p2=*(p2+1);*(p2+1)=*temp;}}void main(){char *a[]={"Follow","BASIC","Great","FORTRAN","Computer"};int i;clrscr();taxis(a,N);printf("The result of taxis is:\n");for(i=0;i<N;i++)printf("%s\n",a[i]);}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行起泡排序(源程序的字符串顺序排序)*/ #include<stdio.h>#include<string.h>#include<conio.h>#define N 5void taxis(char **p1,int k){int i;char **p2,**temp;for(i=0;i<k-1;i++)for(p2=p1;p2<p1+k-1-i;p2++)if(strcmp(*p2,*(p2+1))>0){*temp=*p2;*p2=*(p2+1);*(p2+1)=*temp;}}void main(){char *a[]={"Follow","BASIC","Great","FORTRAN","Computer"};int i;clrscr();taxis(a,N);for(i=0;i<N;i++)printf("%s\n",a[i]);}/*将整型数组的元素进行起泡排序(终端输入的整型排序),如果连续出现3个为0的数据,*//*则默认判断这3个为0的数据无效以和其后面是没有数据,*//*即不输出这3个为0的数据以和其后面的数据(元素来自终端)*/#include<stdio.h>#include<conio.h>#define N 50void taxis(int b[],int k){int i,j,temp;for(i=0;i<k-1;i++)for(j=0;j<k-1-i;j++)if(b[j]>b[j+1]){if(b[j+1]==0&&b[j+2]==0&&b[j+3]==0)break;else{temp=b[j];b[j]=b[j+1];b[j+1]=temp;}}}void main(){int a[N]={0},i;clrscr();printf("please input no more than %d int datas:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);taxis(a,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){printf("%d",a[i]);if(a[i+1]==0&&a[i+2]==0&&a[i+3]==0)break;printf(",");}}/*将整型数组的元素进行起泡排序(终端输入的整型排序-指针),如果连续出现3个为0的数据,*/ /*则默认判断这3个为0的数据以和其后面是没有数据,*//*即不输出这3个为0的数据以和其后面的数据(元素来自终端)*/#include<stdio.h>#include<conio.h>#define N 50void taxis(int *p1,int k){int i,temp,*p2;for(i=0;i<k-1;i++)for(p2=p1;p2<p1+k-1-i;p2++)if(*p2>*(p2+1)){if(*(p2+1)==0&&*(p2+2)==0&&*(p2+3)==0)break;else{temp=*p2;*p2=*(p2+1);*(p2+1)=temp;}}}void main(){int a[N]={0},*p;clrscr();printf("please input no more than %d int datas:\n",N);for(p=a;p<a+N;p++)scanf("%d",p);taxis(a,N);printf("The result of taxis is:\n");for(p=a;p<a+N;p++){printf("%d",*p);if(*(p+1)==0&&*(p+2)==0&&*(p+3)==0)break;printf(",");}}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行起泡排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#include<stdio.h>#include<string.h>#include<conio.h>#define N 50#define size 15void taxis(char **p1,int k){int i;char **p2,**temp;for(i=0;i<k;i++)for(p2=p1;p2<p1+k-1-i;p2++)if(strlen(*p2)>strlen(*(p2+1))&&strlen(*(p2+1))!=0){*temp=*p2;*p2=*(p2+1);*(p2+1)=*temp;}}void main(){ char a[size]={0},*p[N]={0};int i;clrscr();printf("Please input no more than %d strings\n",N);for(i=0;i<N;i++){gets(a);if(strlen(a)==0)break;p[i]=(char*)calloc(sizeof(a),sizeof(char));strcpy(p[i],a);}taxis(p,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){if(strlen(p[i])==0)break;printf("%s\n",p[i]);}}/*将字符串按字母顺序(字母对应的ASCⅡ值由小到大)进行起泡排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#include<stdio.h>#include<string.h>#include<conio.h>#define N 50#define size 15void taxis(char **p1,int k){int i;char **p2,**temp;for(i=0;i<k;i++)for(p2=p1;p2<p1+k-1-i;p2++)if(strcmp(*p2,*(p2+1))>0&&strlen(*(p2+1))!=0){*temp=*p2;*p2=*(p2+1);*(p2+1)=*temp;}}void main(){ char a[size]={0},*p[N]={0};int i;clrscr();printf("Please input no more than %d strings\n",N);for(i=0;i<N;i++){gets(a);if(strlen(a)==0)break;p[i]=(char*)calloc(sizeof(a),sizeof(char));strcpy(p[i],a);}taxis(p,N);printf("The result of taxis is:\n");for(i=0;i<N;i++){if(strlen(p[i])==0)break;printf("%s\n",p[i]);}}快速排序//C语言中的快速排序//从终端输入不多于N个整型数据,然后将它们进行选择排序(从小到大),如果连续输入3个为0的数据, //则默认判断这3个为0的数据无效以和其后面是没有数据,*///即不输出这3个为0的数据以和其后面的数据#include <stdio.h>#define N 20void quick_sort(int data[], int low, int high){int i, j, pivot;if (low < high){pivot=data[low];i=low;j=high;while(i<j){while (i<j && data[j]>=pivot)j--;if(i<j)data[i++]=data[j];while (i<j && data[i]<=pivot)i++;if(i<j)data[j--]=data[i];}data[i]=pivot;quick_sort(data,low,i-1);quick_sort(data,i+1,high);}}int input_data(int data[]){int i,k;k=0;for(i=0;i<N;i++){scanf("%d",&data[i]);k++;if(k>=3&&data[i]==0&&data[i-1]==0&&data[i-2]==0){k-=3;break;}}return k;}void output_data(int data[],int m){int i;printf("The result of taxis is:\n");for(i=0;i<m;i++){printf("%d",data[i]);if(i+1<m)printf(",");if((i+1)%10==0)printf("\n");}printf("\n");}void main(){int n,data[N]={0};printf("please input no more than %d int datas:\n",N);n=input_data(data);quick_sort(data,0,n-1);output_data(data,n);}。

相关文档
最新文档