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`的值。

c语言排序方法

c语言排序方法

c语言排序方法C语言是一种高效的编程语言,其基础算法和数据结构内容是必备的知识。

排序算法是其中一种重要的基础算法,是C语言程序开发中常用的一种技能,可以帮助我们对数据进行有序处理,更好地解决问题。

在C语言中,排序算法分为内部排序和外部排序。

内部排序是指将需要排序的数据都放在内存中进行排序,主要适用于数据量较小的情况。

而外部排序则是指需要对大数据集进行排序,需要借助外部存储器进行排序。

在此我们主要讨论内部排序算法。

内部排序可以分为以下几类:1. 插入排序插入排序包括直接插入排序、希尔排序等。

直接插入排序是将一个记录插入到有序表中形成一个新的有序表;而希尔排序是通过缩小元素间的间隔,并对每个子序列分别进行插入排序来完成整个排序过程。

插入排序方法简单,适用于小数组或部分有序的数组,是稳定排序方法。

2. 选择排序选择排序包括简单选择排序、堆排序等。

简单选择排序是通过不断的在剩余元素中找到最小元素,并将其放在已排好序的数组末尾进行排序,是不稳定排序方法;而堆排序则是通过将待排序数组看作一个完全二叉树,不断将根节点放到其正确位置上进行排序,是不稳定排序方法。

3. 交换排序交换排序包括冒泡排序、快速排序等。

冒泡排序是通过不断比较相邻的两个数,将较小(或较大)数向前(或向后)交换,在每一次外循环中确定一个元素的位置的排序方法,是稳定排序方法;而快速排序则是通过不断地将待排序数组分成两部分,分别进行递归排序,再将两部分合并成一个有序的数组,是不稳定排序方法。

4. 合并排序合并排序是将待排序数组分成若干个子数组,将每个子数组排好序,再将排好序的子数组合并成最终有序的数组。

合并排序是稳定排序方法,主要优化点在于合并有序数组的过程中需要有额外的空间存放有序的数据。

在实际开发中,我们需要选择适合当前情况的排序方法,优化算法的实现,提高算法的效率。

另外,在使用排序算法的过程中,我们还需要注意以下几点:1. 数据量的大小决定了排序算法的选择。

c语言几种数组排序方法

c语言几种数组排序方法

常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序。

一、冒泡排序冒泡排序:是从第一个数开始,依次往后比较,在满足判断条件下进行交换。

代码实现(以降序排序为例)#include<stdio.h>int main(){int array[10] = { 6,9,7,8,5,3,4,0,1,2 };int temp;for (int i = 0; i < 10; i++){//循环次数for (int j = 0; j <10 - i-1; j++){if (array[j] < array[j+1]){//前面一个数比后面的数大时发生交换temp = array[j];array[j] = array[j+1];array[j + 1] = temp;}}} //打印数组for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}二、选择排序以升序排序为例:就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。

与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。

(以升序为例)#include<stdio.h>int main(){int array[10] = { 6,9,7,8,5,3,4,0,1,2 };int temp, index;for (int i = 0; i < 9; i++) {index = i;for (int j = i; j < 10; j++){if (array[j] < array[index])index = j;}if(i != index){temp = array[i]; array[i] = array[index]; array[index] = temp; }for(int i=0;i<10:i++) printf("%2d"array[i])return 0;}三、快速排序是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

数组排序c语言

数组排序c语言

数组排序c语言
数组排序是一种常见的算法,它可以将一个数组中的元素按照一定的规则进行排序。

在c语言中,可以使用多种不同的算法来实现数组的排序,包括冒泡排序、插入排序、选择排序等等。

下面将介绍这些算法的基本实现方法和具体操作步骤。

1. 冒泡排序
冒泡排序是一种基础的排序算法,它的基本思想是依次比较相邻的两个元素,将较大的元素向后移动,最终实现整个数组的排序。

具体操作步骤如下:
(1)从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。

(2)重复上述操作,直到所有元素都被排序。

2. 插入排序
插入排序是一种简单易懂的排序算法,它的基本思想是将一个元素插入到已经排序好的元素序列中,最终实现整个数组的排序。

具体操作步骤如下:
(1)从第二个元素开始,将它插入到已经排序好的前面的序列中。

(2)重复上述操作,直到所有元素都被排序。

3. 选择排序
选择排序是一种简单直观的排序算法,它的基本思想是每次找出最小的一个元素,并将其放到最前面,重复上述操作,直到所有
元素都被排序。

具体操作步骤如下:
(1)从数组的第一个元素开始,依次找出最小的元素,并将其放到数组的最前面。

(2)重复上述操作,直到所有元素都被排序。

以上就是c语言中常用的三种数组排序算法。

当然,还有其他的排序算法,每种算法都有其优缺点,根据具体的需求和问题,选择不同的排序算法可以使得程序更加高效和稳定。

c语言常见排序算法

c语言常见排序算法

常见的C语言排序算法有以下几种:
1. 冒泡排序(Bubble Sort):比较相邻的元素,如果前一个元素大于后一个元素,则交换它们的位置,重复这个过程直到整个序列有序。

2. 插入排序(Insertion Sort):将未排序的元素逐个插入到已排序序列中的正确位置,直到整个序列有序。

3. 选择排序(Selection Sort):每次从未排序的元素中选择最小的元素,将其放到已排序序列的末尾,重复这个过程直到整个序列有序。

4. 快速排序(Quick Sort):选择一个基准元素,将序列分成两部分,一部分小于等于基准元素,一部分大于基准元素,然后对两部分递归地进行快速排序。

5. 归并排序(Merge Sort):将序列分成两部分,分别对两部分进行归并排序,然后将两个有序的子序列合并成一个有序的序列。

6. 堆排序(Heap Sort):将序列构建成一个最大堆,然后将堆顶元素与堆末尾元素交换,重复这个过程直到整个序列有序。

7. 希尔排序(Shell Sort):将序列按照一定的间隔分成若干个子序列,对每个子序列进行插入排序,然后逐渐减小间隔直到间隔为1,最后对整个序列进行插入排序。

8. 计数排序(Counting Sort):统计序列中每个元素出现的次数,然后按照元素的大小顺序将它们放入一个新的序列中。

9. 基数排序(Radix Sort):按照元素的个位、十位、百位等依次进行排序,直到所有位数都排完为止。

以上是常见的C语言排序算法,每种算法都有其特点和适用场景,选择合适的排序算法可以提高排序效率。

C语言三种基本排序方法

C语言三种基本排序方法

C语言三种基本排序方法
一、选择排序法。

选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换。

二、冒泡排序法。

冒泡排序算法的运作如下:(从后往前)比较相邻的元素。

如果第一个比第二个大,就交换他们两个。

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

在这一点,最后的元素应该会是最大的数。

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

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

三、插入排序法。

所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。

插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。

插入排序的基本思想是:每步将一个待排序的纪录,按其关
键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止(分为直接插入法和折半插入法)。

C语言最常用的六种排序方法详解

C语言最常用的六种排序方法详解

1.冒泡排序:
2.简单选择排序:
3.快速排序:
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。

4.直接插入排序:
5.折半插入排序:
折半插入排序(binary insertion sort)是对插入排序算法的一种改进,在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为a[low],末元素设置为
a[high],则轮比较时将待插入元素与a[m],其中m=(low+high)/2相比较,如果比参考元素小,则选择a[low]到a[m-1]为新的插入区域(即high=m-1),否则选择a[m+1]到a[high]为新的插入区域(即low=m+1),如此直至low<=high不成立,即将此位置之后所有元素后移一位,并将新元素插入a[high+1]。

代码:
6.希尔排序:。

c语言的排序方法

c语言的排序方法

c语言的排序方法C语言的排序方法排序是计算机科学中常见的操作,它的作用是将一组数据按照特定的规则进行重新排列。

在C语言中,有多种排序方法可以实现这个目标。

本文将介绍几种常见的排序算法,包括冒泡排序、插入排序、选择排序、快速排序和归并排序。

一、冒泡排序冒泡排序是一种简单但效率较低的排序算法。

它的基本思想是多次遍历待排序的数据,每次比较相邻的两个元素,如果它们的顺序不对就交换它们的位置。

通过多次遍历,最大(或最小)的元素会逐渐“冒泡”到最后。

二、插入排序插入排序是一种稳定且效率较高的排序算法。

它的基本思想是将待排序的数据分为已排序和未排序两部分,每次从未排序部分选择一个元素插入到已排序部分的正确位置。

通过多次插入操作,最终得到完全有序的数据。

三、选择排序选择排序是一种简单但效率较低的排序算法。

它的基本思想是每次从待排序的数据中选择最小(或最大)的元素,然后放到已排序部分的末尾。

通过多次选择操作,最终得到完全有序的数据。

四、快速排序快速排序是一种常用且高效的排序算法。

它的基本思想是通过递归地将待排序的数据分为两部分,一部分小于某个基准值,另一部分大于该基准值。

然后对这两部分分别进行快速排序,直到每个部分只有一个元素或为空。

最后将所有部分合并起来,即得到完全有序的数据。

五、归并排序归并排序是一种稳定且效率较高的排序算法。

它的基本思想是将待排序的数据分成若干个长度相等(或接近)的子序列,然后对每个子序列进行排序。

最后将排好序的子序列两两合并,直到所有子序列合并成一个有序的序列。

不同的排序算法适用于不同的场景。

冒泡排序和选择排序适用于数据量较小的情况,插入排序适用于数据基本有序的情况,快速排序适用于数据量较大且无序的情况,归并排序适用于数据量较大且需要稳定排序的情况。

在C语言中,实现这些排序算法并不复杂。

通过使用循环和条件语句,可以很容易地编写出排序的代码。

同时,为了提高排序算法的效率,还可以使用一些优化技巧,例如设置哨兵、使用递归等。

C语言的四种排序

C语言的四种排序

简单选择排序/* 对整型数组的元素进行简单选择排序(源程序的整型简单选择排序)*/ #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 H值由小到大)进行简单选择排序(源程序的字符串长度排序)*/ #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 H值由小到大)进行简单选择排序(源程序的字符串顺序排序)*/ #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;}}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=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 H值由小到大)进行简单选择排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#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 H值由小到大)进行简单选择排序(终端输入的字符串顺序排序)*/ /*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#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 6 void 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 H值由小到大)进行选择排序(源程序的字符串长度排序)*/ #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 H值由小到大)进行选择排序(源程序的字符串顺序排序)*/ #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++)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 H值由小到大)进行选择排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#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)p2=p3;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 H值由小到大)进行选择排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#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);*(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]);}}起泡排序/* 对整型数组的元素进行起泡排序(源程序的整型排序)*/ #include<stdio.h>#include<conio.h> #define N 6 void 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 H值由小到大)进行起泡排序(源程序的字符串长度排序)*/ #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 H值由小到大)进行起泡排序(源程序的字符串顺序排序)*/ #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 H值由小到大)进行起泡排序(终端输入的字符串顺序排序)*/ /*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#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 H值由小到大)进行起泡排序(终端输入的字符串顺序排序)*//*当输入字符串时,遇到"回车"键则表示该字符串输入结束;当连续输入两个"回车键"时,则表示所有字符串输入结束*/#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);}。

排序c语言

排序c语言

排序c语言排序是计算机程序中最基本的操作之一,使用排序算法可以将数字、字符串、结构体等类型的数据按照一定条件进行排序。

排序既有理论的研究,也有实际的应用需求,在各个领域都发挥了重要的作用。

本文将主要介绍常用的排序算法以及它们的实现方法。

一、插入排序插入排序是一种简单直观的排序方法,它的核心思想是将一个元素插入到已经排好序的序列中。

插入排序可以分为直接插入排序和希尔排序两种。

1. 直接插入排序直接插入排序的基本操作是将一个新元素插入到已经排好序的子序列中。

具体实现时,我们从第二个元素开始,将它与前面的所有比它大的元素进行比较,如果出现比它小的元素,就将它插到该元素的后面位置。

这个过程类似于打扑克时,将牌插到已经排好的一组牌中的操作。

直接插入排序的时间复杂度为 $O(n^2)$,但对于基本有序的序列,它的效率会非常高。

代码实现如下:void insertSort(int *A, int n) {for (int i = 1; i < n; i++) {int key = A[i];int j = i - 1;while (j >= 0 && A[j] > key) {A[j + 1] = A[j];j--;}A[j + 1] = key;}}2. 希尔排序希尔排序是直接插入排序的一种改进算法,它采用增量序列的方式进行排序。

具体实现时,我们将待排序的序列按照一定的增量划分为若干个子序列,然后对每个子序列进行直接插入排序,随着增量的逐渐减小,子序列之间的相互影响逐渐增强,最终完成整个序列的排序。

希尔排序的时间复杂度取决于增量序列的选择,如果增量序列为 $2^k-1$,则它的时间复杂度为 $O(n^{\frac{3}{2}})$。

但实际应用中,我们可以根据序列的特点选择适当的增量序列,这样可以在实际的应用中取得较好的效果。

代码实现如下:二、交换排序交换排序是一种基于比较的排序方法,它通过不断地交换相邻元素的位置来改变元素在序列中的相对位置。

  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);}。

相关文档
最新文档