c语言怎样实现快速排序includestdio.h
int arr_num[];
int length;
void quick_sort(int left, int right)
{
int i, j, c, temp;
if(leftright)
return;
i= left;
j= right;
temp = arr_num[i]
while(i != j)
{
while(arr_num[j]=tempij)
{
j--;
}
while(arr_num[i]=tempij)
{
i;
}
if(ij)
{
c = arr_num[i];
arr_num[i] = arr_num[j];
arr_num[j] = c;
}
}
//left为起始值(参照值)此时的I为第一次排序结束的最后值,与参照值交换位置
arr_num[left] = arr_num[i];
arr_num[i] = temp;
//继续递归直到排序完成
quick_sort(left, i-1);
quick_sort(i 1, right);
}
int main()
{
int i;
length = 7;
arr_num[length] = {23, 7, 17, 36, 3, 61, 49}
//快速排序调用
quick_sort(0, length-1);
//输出排序后的结果
for(i=1;i=length;i)
printf("%d ",arr_num[i]);
getchar();getchar();
return 0;
}
c语言快速排序/*
功能:快速排序
输入:数组名称(也就是数组首地址)、数组中起止元素的下标
================================================
*/
/*
====================================================
算法思想简单描述:
快速排序是对冒泡排序的一种本质改进 。它的基本思想是通过一趟
扫描后,使得排序序列的长度能大幅度地减少 。在冒泡排序中,一次
扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只
减少1 。快速排序通过一趟扫描 , 就能确保某个数(以它为基准点吧)
的左边各数都比它?。冶吒魇急人?。然后又用同样的方法处理
它左右两边的数,直到基准点的左右只有一个元素为止 。它是由
C.A.R.Hoare于1962年提出的 。
显然快速排序可以用递归实现,当然也可以用栈化解递归实现 。下面的
函数是用递归实现的,有兴趣的朋友可以改成非递归的 。
快速排序是不稳定的 。最理想情况算法时间复杂度O(nlog2n),最坏O(n2)
=====================================================
*/
void quick_sort(int *x, int low, int high)
{
int i, j, t;
if (lowhigh) /*要排序的元素起止下标 , 保证小的放在左边 , 大的放在右边 。这里以下标为low的元素为基准点*/
{
i = low;
j = high;
t = *(x low); /*暂存基准点的数*/
while (ij) /*循环扫描*/
{
while (ij*(x j)t) /*在右边的只要比基准点大仍放在右边*/
{
j--; /*前移一个位置*/
}
if (ij)
{
*(x i) = *(x j); /*上面的循环退出:即出现比基准点小的数,替换基准点的数*/
i; /*后移一个位置,并以此为基准点*/
}
while (ij*(x i)=t) /*在左边的只要小于等于基准点仍放在左边*/
{
i; /*后移一个位置*/
}
if (ij)
{
*(x j) = *(x i); /*上面的循环退出:即出现比基准点大的数,放到右边*/
j--; /*前移一个位置*/
}
}
*(x i) = t; /*一遍扫描完后,放到适当位置*/
quick_sort(x,low,i-1);/*对基准点左边的数再执行快速排序*/
quick_sort(x,i 1,high);/*对基准点右边的数再执行快速排序*/
}
}
用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;
//保存排序区间c语言如何快速排序函数的 起始位置和终点位置
int left = low, right = high;
//默认 左边第一个元素 为标志
int key = arr[low];
while (lowhigh)
{
while (lowhigharr[high] = key) --high;
arr[low] = arr[high];
while (lowhigharr[low] = key)low;
arr[high] = arr[low];
}
arr[low] = key;
//每次排序后都分成两部分[left, low) (low, right]
//arr[low]的位置是一定是有序的
QuickSort(arr, left, low - 1);
QuickSort(arr, low1, right);
return;
}
int main(void)
{
int n;
scanf("%d", n);
int arr[MAXN] = {0};
int i;
for (i = 0; in;i)
scanf("%d", arr[i]);
//输入是默认为生活中习惯的数组左边第一个为c语言如何快速排序函数:编号1
int s, m;
scanf("%d %d", s, m);
//转成计算机数组第一个为c语言如何快速排序函数:编号0
s--; m--;
//快排
QuickSort(arr, s, m);
//输出
【c语言如何快速排序函数 c语言怎么实现排序】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语言如何快速排序函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言怎么实现排序、c语言如何快速排序函数的信息别忘了在本站进行查找喔 。
推荐阅读
- gis生产和qc工程图的简单介绍
- 怎么装第二个个显卡,电脑怎么安两个显卡
- java代码拼接ajax java代码拼接遥感影像
- 怎么打开来电话的视频号,来电话时视频在哪里设置
- phpcms调最新新闻,phpcms文档
- python函数参数类实例的简单介绍
- java重复代码注解,java重复定义
- 中客游戏大巴车模拟,35人大巴车算中客吗
- 计算机专业毕业设计旅游,计算机专业做什么毕业设计比较简单