本文目录一览:
C语言快速排序的代码
首先我赞成你直接要代码的这种方法。
从你这个提问可以看出你对常用的排序算法都接触过,并且都没搞懂到底是怎么回事。
现在的电子平台资源都很丰富了,硬件平台的运行速度可以做到很高了,在大多数的情况下可以考虑用空间换时间的方法,也就是说你应该先搞懂算法的本质,然后再自己去实现它,开始的时候可以不考虑时间上的损耗。
排序的本质就是两个数比较大小,并根据其大小将其放到相应的位置。
记住其本质是什么,你自己绝对可以使用相应的语言实现它。
用c语言编写函数QuickSort()来实现快速排序
#include stdlib.h
#include stdio.h
#define MAXN 8
#define MOD 1024
void QuickSort(int *arr, int low, int high)
{
if (low = high) return;
//保存排序区间的 起始位置和终点位置
int left = low, right = high;
//默认 左边第一个元素 为标志
int key = arr[low];
while (low high)
{
while (low high arr[high] = key) --high;
arr[low] = arr[high];
while (low high arr[low] = key) ++low;
arr[high] = arr[low];
}
arr[low] = key;
//每次排序后都分成两部分[left, low) (low, right]
//arr[low]的位置是一定是有序的
QuickSort(arr, left, low - 1);
QuickSort(arr, low + 1, right);
return;
}
int main(void)
{
int n;
scanf("%d", n);
int arr[MAXN] = {0};
int i;
for (i = 0; i n; ++i)
scanf("%d", arr[i]);
//输入是默认为生活中习惯的数组左边第一个为:编号1
int s, m;
scanf("%d %d", s, m);
//转成计算机数组第一个为:编号0
s--; m--;
//快排
QuickSort(arr, s, m);
//输出
for (i = s; i = m; ++i)
{
printf("%d ", arr[i]);
}
return 0;
}
//测试数据
//8
//1 2 3 4 5 6 7 8
//2 6
输出 6 5 4 3 2
用C语言编程实现快速排序算法
给个快速排序你参考参考
/********************** 快速排序 ****************************
基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录),
以该记录为基准,将当前的无序区划分为左右两个较小的无
序子区,使左边的记录均小于基准值,右边的记录均大于或
等于基准值,基准值位于两个无序区的中间位置(即该记录
最终的排序位置)。之后,分别对两个无序区进行上述的划
分过程,直到无序区所有记录都排序完毕。
*************************************************************/
/*************************************************************
函数名称:static void swap(int *a, int *b)
参 数:int *a---整型指针
int *b---整型指针
功 能:交换两个整数的位置
返 回 值:无
说 明:static关键字指明了该函数只能在本文件中使用
**************************************************************/
static void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int quickSortNum = 0; // 快速排序算法所需的趟数
/*************************************************************
函数名称:static int partition(int a[], int low, int high)
参 数:int a[]---待排序的数据
int low---无序区的下限值
int high---无序区的上限值
功 能:完成一趟快速排序
返 回 值:基准值的最终排序位置
说 明:static关键字指明了该函数只能在本文件中使用
**************************************************************/
static int partition(int a[], int low, int high)
{
int privotKey = a[low]; //基准元素
while(low high)
{ //从表的两端交替地向中间扫描
while(low high a[high] = privotKey) // 找到第一个小于privotKey的值
high--; //从high所指位置向前搜索,至多到low+1位置
swap(a[low], a[high]); // 将比基准元素小的交换到低端
while(low high a[low] = privotKey) // 找到第一个大于privotKey的值
low++; //从low所指位置向后搜索,至多到high-1位置
swap(a[low], a[high]); // 将比基准元素大的交换到高端
}
quickSortNum++; // 快速排序趟数加1
return low; // 返回基准值所在的位置
}
/*************************************************************
函数名称:void QuickSort(int a[], int low, int high)
参 数:int a[]---待排序的数据
int low---无序区的下限值
int high---无序区的上限值
功 能:完成快速排序算法,并将排序完成的数据存放在数组a中
返 回 值:无
说 明:使用递归方式完成
**************************************************************/
void QuickSort(int a[], int low, int high)
{
if(low high)
{
int privotLoc = partition(a, low, high); // 将表一分为二
QuickSort(a, low, privotLoc-1); // 递归对低子表递归排序
QuickSort(a, privotLoc+1, high); // 递归对高子表递归排序
}
}
C语言快速排序代码
采用快速排序,用递归实现
#include stdio.h
#define N 10 //定义排序数组元素个数
int Qsort(int start,int length,int a[])//start排序的起始,length是要排序序列长度
{
int x = a;
int i,j;
i = start;
j = length -1;
while(i j)
{
if(x a[j])
j--;
else if(x a[j])
{
a[i] = a[j];
a[j] = x;
i++;
}
else if(x a[i])
{
a[j] = a[i];
a[i] = x;
j--;
}
else
i++;
}
if(start length-1)
{
Qsort(start,i,a);
Qsort(i+1,length,a);
}
}
void main()
{
int a[N] = {0};
int i;
for(i = 0;i N;i++)
scanf("%d",a[i]);
Qsort(0,N,a);
for(i = 0;i N;i++)
printf("%d ",a[i]);
}
程序执行时输入N个数,对这N个数进行排序,可以预设N的长度