用C语言编写函数,要实现快速排序算法或者冒泡法
发布网友
发布时间:2022-04-29 20:37
我来回答
共3个回答
热心网友
时间:2022-05-22 02:46
冒泡法排序函数如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)/*共进行n-1轮*/
for(j=0;j<n-1-i;j++)/*每轮在前n-i个数中比较*/
if(a[j]>a[j+1]) /*若相邻元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交换*/
}
void sort(int *a, int left, int right)
{
if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i < j) /*控制在当组内寻找一遍*/
{
while(i < j && key <= a[j])
/*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/
{
j--;/*向前寻找*/
}
a[i] = a[j];
/*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
a[left],那么就是给key)*/
while(i < j && key >= a[i])
/*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/
/*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
}
热心网友
时间:2022-05-22 04:04
快排:
#include <stdio.h>
int qsort(int* a,int low,int high)
{
int temp = a[low];
while(low<high)
{
while(low < high && temp < a[high])
--high;
a[low] = a[high];
while(low < high && temp > a[low])
++low;
a[high] = a[low];
}
a[low] = temp;
return low;
}
void sort(int* a,int low,int high)
{
int temp;
if(low<high)
{
temp = qsort(a,low,high);
qsort(a,low,temp-1);
qsort(a,temp+1,high);
}
}
int main()
{
int list[] = {4,5,6,3,7,1};
sort(list,0,5);
char i;
for(i=0;i<6;i++)
printf("%3d",list[i]);
printf("\n");
return 0;
}
冒泡:
void sort(int *a,int len)//参数1,表示数组,参数2表示数组长度
{
int i,j,t;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(a[j]<a[j+1])
{
t = a[j];
a[j] = a [j+1];
a[j+1] = t;
}
}
}
}
都是自己平时写的,全部可以调试通过,快排要是看不懂加我Q,285296372~
热心网友
时间:2022-05-22 05:38
冒泡很简单,两个for循环嵌套就行了
void bubble(vector<int> &put)// put容器内放入要排序的数据即可
{
int temp;
temp=put[0];
for(int i=1;i!=put.size();i++)
for(int j=0;j<i;j++)
if(put[j]>put[i])
{
temp=put[i];
put[i]=put[j];
put[j]=temp;
}
}
c语言大师求破,麻烦把快速、冒泡、选择以及升序降序各做一次,多谢...
include<stdio.h>#include<malloc.h>void QuickSort(int a[],int numsize) //快速排序 升序{int i=0,j=numsize-1;int val=a[0];if(numsize>1){while(i<j){for(;j>i;j--)if(a[j]<val) //降序把 < 改为: >{a[i]=a[j];break;}for(;i<j;i++)if(a[i]>val) //降...
c语言中如何排序?
1. 冒泡排序(Bubble Sort):```c void bubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;} } } } ``...
用C语言编写函数实现快速排序(升序),在主函数中输入数组数据,并调用该...
//排序的算法是二分法,N的对数时间复杂度。。。//如果有疑问,我们可以再探讨。。。include<stdlib.h> include<string.h> include<stdio.h> bool merge(int * array,int p,int q,int r){ if(!(p<<q<r)&&p>=0&&r<=sizeof(array)/sizeof(array[0])-1){ return false;} int * le...
用C语言,随机输入10个整数,用冒泡排序法对这些整数进行从小到大排序...
int b[10]={9,10,11,12,1,2,3,4,0,1};int c[10]={1,2,3,4,13,14,15,16,2,3};int i;printf("请输入待排序的10个数:");for(i=0;i<10;i++){ scanf("%d",&a[i]);} fun(a);printf("\n排序后的数列如下:\n");for(i=0;i<10;i++){ printf("%2d ",a[i...
C语言实现将数组的六个元素按从小到大的顺序输出?
C语言实现将数组的六个元素按从小到大的顺序输出,可以采用内部排序算法对数组的元素进行排序,然后输出排序后的数组,就可以得到按从小到大的顺序输出。以快速排序为例的排序代码:void quickSort(int a[],int l,int r) { if(l>=r)return;int i = l;int j = r;int key = a[l];//选择...
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 = ...
C语言,输入一组数进行排序,由大到小排列,用自定义函数实现
给你一个直接插入排序 include "stdio.h"void InsertSort(int a[], int left, int right) {//对数组a从下标为left到right区域进行直接插入排序 int i, j, tmp;for(i = left + 1; i <= right; i++) { for(j = i - 1, tmp = a[i]; j >= left && tmp > a[j]; j++...
冒泡排序法和快速排序比较的算法
这个问题,那么我的答案就是:在我编写的《Programming Pearls, Second Edition》(Addison-Wesley)一书中给出的Quichsort算法。在示例2-1中给出了用C语言编写的Quicksort函数。我们在接下来的章节中将进一步地研究和改善这个函数。【示例】 2-1 Quicksort函数void quicksort(int l, int u){ int i, m;if (l ...
C语言冒泡排序。
void main(){ int a[10];int i,j,t;printf("input 10 numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(j=0;j<9;j++) /*进行9次循环 实现9趟比较*/ for(i=0;i<9-j;i++) /*在每一趟中进行9-j次比较*/ if(a[i]>a[i+1]) /*相邻两个数比较,想降序...
C语言快速排序
/快速排序算法/ int Partition(int D[], int l, int r){ D[0]=D[l];while (l<r) { while (l<r && D[0]<D[r]) r--;D[l]=D[r];while (l<r && D[0]>=D[l]) l++;D[r]=D[l]; } D[r]=D[0];return r;} void Qsort(int D[], int l, int r){ int p...