c语言快速排序的实现

以前写的一些老代码

留着没事可以看看


 1 //
2 // main.c
3 // cTest
4 //
5 // Created by on 13-10-8.
6 // Copyright (c) 2013年. All rights reserved.
7 //
8
9 #include <stdio.h>
10
11 #define N (10)
12
13 void quickSor(int *nums, int indexStart, int indexEnd);
14 int partition(int *nums, int indexStart, int indexEnd);
15 void exchange(int *nums, int p1, int p2);
16 void printNums(int *nums, int count);
17
18 int main()
19 {
20 printf(">>>strat\n");
21 int nums[N] = {0, 4, 2, 5, 1, 3, -1, 19, 99, -100};
22 printNums(nums, N);
23 int mid = partition(nums, 0, N-1);
24 printNums(nums, N);
25 printf("mid = %d\n", mid);
26 quickSor(nums, 0, N-1);
27 printNums(nums, N);
28 return 0;
29 }
30
31 void quickSor(int *nums, int indexStart, int indexEnd)
32 {
33 if (indexEnd > indexStart)
34 {
35 int indexMid = partition(nums, indexStart, indexEnd);
36 quickSor(nums, indexStart, indexMid-1);
37 quickSor(nums, indexMid+1, indexEnd);
38 }
39
40 }
41
42 int partition(int *nums, int indexStart, int indexEnd)
43 {
44
45 int p2 = indexStart-1;
46 int p1;
47
48 int target = nums[indexEnd];
49
50 for (p1 = indexStart; p1 < indexEnd; p1++)
51 {
52 if (nums[p1] <= target)
53 {
54 p2++;
55 exchange(nums, p1, p2);
56
57 }
58 }
59 exchange(nums, p2+1, indexEnd);
60 return p2+1;
61 }
62
63 void exchange(int *nums, int p1, int p2)
64 {
65 int tmp = nums[p1];
66 nums[p1] = nums[p2];
67 nums[p2] = tmp;
68 }
69
70 void printNums(int *nums, int count)
71 {
72 printf("numbers : ");
73 int i;
74 for (i = 0; i < count; ++i)
75 {
76 printf("%4d\t", nums[i]);
77 }
78 printf("\n");
79 }

时间: 2024-08-13 04:35:46

c语言快速排序的实现的相关文章

C语言快速排序算法代码分析

最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要.有的时候代码的可维护.可重用.可扩展确实胜过单纯的算法效率高.所以拾起大牛书籍<大话设计模式>同时参考网上诸大牛的博客,开始我的设计模式之旅.由于平时编程时用C/C++,现在是Java,也练练Java语法. 今天先介绍一下命令模式. 概念: 命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作.

C语言—快速排序

基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. void sort(int *a, int left, int right) { if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/ { return ; } int i = left; int j = right; int key

C语言 - 快速排序算法

1. 快速排序算法 1 #include<stdio.h> 2 3 struct node 4 { 5 int key; 6 }; 7 typedef struct node DataType; 8 9 int Qukpass_sort(DataType Ar[],int s,int t); 10 int Quk_Sort(DataType Ar[],int s,int t); 11 12 int main(void) 13 { 14 15 int n,i; 16 DataType array

c语言快速排序算法(转)

原文链接http://blog.csdn.net/morewindows/article/details/6684558 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影. 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解

C语言快速排序

1 /** 2 快速排序的原理: 3 左边的数比middle小 4 右边的数比middle大 5 **/ 6 # include<stdio.h> 7 # include<stdlib.h> 8 void sort(int a[],int low,int high) 9 { 10 int m = a[(low+high)/2]; 11 int i = low,j = high; 12 //分割成两个序列 13 do 14 { 15 //左边的序列 16 while(a[i] <

C语言“快速排序”函数写法

代码是:C语言中快速排的写法,要加入头文件   <stdlib.h> qsort(数组名, 长度, 数据类型大小,比较算子 ): #include <stdio.h> #include <string.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(int *)a-*(int *)b; //从小到大进行排序 例如输出: 1 2 3 4 5 } int main()

C 语言快速排序算法以及 qsort

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 //快速排序 5 void quick_sort(float data[], int left, int right){ 6 int i = left; 7 int j = right; 8 float tag = data[i]; 9 while(i<j){ 10 while( i<j && tag < d

C语言排序和查找

1.C语言选择排序算法及代码 选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直到所有的数从小到大排序. 在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换. 下面,以对 3  2  4  1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置. 第1轮 排序过程 (寻找第1小的数所在的位置) 3

第一周 从C走进C++ 001 函数指针

1. 基本概念: 程序运行期间,每个函数都会占用一段连续的内存空间.而函数名就是该函数所占内存区域的起始地址(也称“入口地址”).我们可以将函数的入口地址赋给一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以调用这个函数.这种指向函数的指针变量称为“函数指针”. 2. 定义形式 类型名 (* 指针变量名)(参数类型1, 参数类型2,…); 例如: int (*pf)(int ,char); 表示pf是一个函数指针,它所指向的函数,返回值类型应是int,该函数应有两个参数,第一个是int