用C语言编程实现快速排序算法

[问题描述]
给出n个学生的考试成绩表,每条信息由姓名和分数组成,用一种快速排序算法编程实现:
(1) 按分数高低次序输出每个学生在考试中获得的名次,分数相同的为同一名次;
(2) 按名次列出每个学生的姓名与分数。

给个快速排序你参考参考

/********************** 快速排序 ****************************
基本思想:在待排序的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);         // 递归对高子表递归排序  
    }
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-22

搞个结构体,重载小于号,sort一下就行里


第2个回答  2015-11-22
貌似比较专业。。。

数据结构C语言--三种以上的排序算法
插入排序算法:定义InsertionSort函数,参数为数组a以及排序区间l和r。遍历指定区间,对于每个元素,与已排序的部分进行比较,将大于当前元素的元素向后移动,直到找到当前元素的正确位置,然后将当前元素插入该位置。实现逻辑如下:初始化变量i、j、t,从l+1开始遍历,与已排序的部分比较,执行移动操作,直...

c语言10个整数快速排序降序
include <stdio.h>void quickSort(int a[],int left,int right)\/\/快速排序法{ int i,j; int k; int t; if(left < right) { i = left; j = right; k = a[left]; while(i < j) { while(i < j && a[j] <= k) j--; while(i < j && a[i] >= k...

用C语言写个完整程序,包括希尔排序和快速排序
(c): a b c d e f g h i k l j m p o n q s u z x y v t r w(i): a b c d e f g h i k l j m p o n q s u z x y v t r w(k): a b c d e f g h i j k l m p o n q s u z x y v t r w(p): a b c d e f g h i j k l m...

C语言快速排序代码
quicksort(a,11);for(int c=1;c<11;c++)printf("%3d",a[c]);}

随机生成一组整数,利用快速排序思想,将其从小到大排好。(c语言代码)
temp = array[j]; array[j] = array[i]; array[i] = temp; } } return j;}\/\/迭代运算void QuikSort(int array[], int left, int right){ int pivot; if (left < right) { pivot = Partition(array, left, right); QuikSort(array, left, pivot-1); QuikSort(array...

数据架构与算法——C\/C++实现快速排序(Quick Sort)算法【建议收藏】
数据架构与算法中,C\/C++语言下快速排序(Quick Sort)是一种常用且高效的排序算法。它基于分治策略,通过一趟排序将数据划分为较小和较大的两部分,然后递归地对这两部分进行排序,最终实现整个数据序列的有序。快速排序的执行流程可以通过一个具体示例来理解,比如数列a={30,40,60,10,20,50}。在排序...

请哥哥姐姐为我设计个简单的快速排序算法,C语言的,谢谢啦!
a,j+1,right);} } \/\/测试排序代码 void print(int *a,int n){ int i;for ( i = 0 ; i < n ; i++ ){ printf("%d ",a[i]);} printf("\\n");} int main(){ int a[20];myrand(a,20);QuickSort(a,0,19);print(a,20);return 0 ;} 呵呵 有问题再联系。。。

用C语言快速排序法编程按从大到小输出下面十个数(24,2,8,32,87,45...
QuickSort(low,Low-1,array); \/*对基准点左边的数再执行快速排序*\/ QuickSort(Low+1,high,array); \/*对基准点右边的数再执行快速排序*\/ } } void main() { int array[]={24,2,8,32,87,45,16,2,12,40};int i=9;QuickSort(0,9,array);for(;i>=0;i--)printf("%d "...

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语言编写函数实现快速排序(升序),在主函数中输入数组数据,并调用该...
\/\/排序的算法是二分法,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 * ...

相似回答