C语言简单查找排序方法及代码(6)

2019-01-12 18:03

iPivPos = Lbb - 1;

for (i=Lbb; i<=Ubb-1; i++) {

if (L[ i ] <= iPivValue) {

iPivPos++;

swap(L[iPivPos], L[ i ]); } }

iPivPos++;

swap(L[iPivPos], L[Ubb]); return iPivPos; }

void quicksort(int L[], int Lbb, int Ubb) {

int iPiv;

if (Lbb < Ubb) {

iPiv = quicksort_partition(L, Lbb, Ubb); quicksort(L, Lbb, iPiv - 1); quicksort(L, iPiv + 1, Ubb); }

return; }

(十)使用C++标准库的快速排序函数

C++的标准库stdlib.h中提供了快速排序函数。

请在使用前加入对stdlib.h的引用:#include 或 #include

qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2)) 参数表

*base: 待排序的元素(数组,下标0起)。 num: 元素的数量。

width: 每个元素的内存空间大小(以字节为单位)。可用sizeof()测得。 int(*)compare: 指向一个比较函数。*elem1 *elem2: 指向待比较的数据。 比较函数的返回值

返回值是int类型,确定elem1与elem2的相对位置。

elem1在elem2右侧返回正数,elem1在elem2左侧返回负数。 控制返回值可以确定升序/降序。 一个升序排序的例程:

int Compare(const void *elem1, const void *elem2) {

return *((int *)(elem1)) - *((int *)(elem2)); }

int main()

{

int a[100];

qsort(a, 100, sizeof(int), Compare); return 0; }

(十一)PASCAL例程 1. 基本思想:

在当前无序区R[1..H]中任取一个数据元素作为比较的\基准\不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。 2. 排序过程: 【示例】:

初始关键字 [10 5 8 4 6 1 5 4 7 2](n为10) 第一次交换后[2 5 4 4 5 1] 6[ 8 10 ] 第二次交换后[2 1 4] 4 [5 5] 6 8[10 ] 第三次交换后1 2 4 4 5 5 6 8 10 最后的排序结果 1 2 4 4 5 5 6 8 10 type xxx=array[1..1000000] of longint; var a,n;longint; x:xxx;

procedure qsort(var x:xxx;l,r:longint);{x为要排序的数组,l为数组的要排序部分的起始位置,r为数组的要排序部分的终点位置} var n,i,j,mid:longint; begin

i:=l;{右边起点值} j:=r;{左边终点值}

mid:=x[(i+j) div 2]; {基准数(用随机化更快)} repeat

while (i<=j) and (xmid) do dec(j);{若右边的数比基准数大且左、右区未定,保留在右边}

if i<=j then{若左、右区未定(定且 左>基准数>右),交换} begin n:=x; x:=x[j]; x[j]:=n; inc(i); dec(j); end;

until i>j;{直到左右区已定(即左边终点j小于右边起点i)} if il then qsort(x,l,j);{若左边多于一个数,快排左边}

end; begin

readln(n);{读入要排序的数的个数}

for a:=1 to n do read(x[a]);{读入要排序的书} writeln;

qsort(x,1,n);{排序程序}

for a:=1 to n-1 do write(x[a],' ');{输出排好序得数} writeln(x[n]); end.

(十二)C语言随机化快排模块化代码 #include \ #include \ #include \

Location(int *a,int low,int high) {

int key,temp,x;

srand((unsigned)time(0)); x=rand()%(high-low+1)+low; key=a[x];

while(low

while(x

while(low=a[low])low++; temp=a[low]; a[low]=key; a[x]=temp; x=low; }

return low; }

Qsort(int *a,int low,int high) {

int locat,i;

if(low>=high)return 0;

locat=Location(a,low,high); Qsort(a,low,locat-1); Qsort(a,locat+1,high); }

(十三)快速排序的JAVA实现 import java.util.Arrays;

public class QuickSort {

public static void quickSort(int[] array) { quickSort(array, 0, array.length - 1); }

private static void quickSort(int[] array, int low, int high) { if (low < high) {

int p = partition(array, low, high); quickSort(array, low, p - 1); quickSort(array, p + 1, high); } }

private static int partition(int[] array, int low, int high) { int s = array[high]; int i = low - 1;

for (int j = low; j < high; j++) { if (array[j] < s) { i++;

swap(array, i, j); } }

swap(array, ++i, high); return i; }

private static void swap(int[] array, int i, int j) { int temp;

temp = array[i]; array[i] = array[j]; array[j] = temp; } /**

* @param args */

public static void main(String[] args) { int[] arr ={12,3,5,4,78,67,1,33,1,1,1}; quickSort(arr);

System.out.println(Arrays.toString(arr)); } }

二分法插入排序 #include #define maxsize 100 typedef int datatype; typedef struct{ datatype a[maxsize];

int size; }sequence_list;

void init_sequence_list(sequence_list *slt) { slt->size=1; }

void insert_sequence_list(sequence_list *slt,datatype x) { if(slt->size==maxsize) printf(\表满,无法插入!\ slt->a[slt->size]=x; slt->size++; }

void print_sequence_list(sequence_list slt) { int i; if(slt.size==1) printf(\表是空的!\ else for(i=1;i

void insert_num_sequence_list(sequence_list *slt) { int x,i,j=1; printf(\请输入插入数的个数:\ scanf(\ do { scanf(\ insert_sequence_list(slt,x); j++; }while(j<=i); }

void binarysort(sequence_list *slt) { int i,j,left,right,mid;

for(i=2;i<=slt->size;i++)

{

slt->a[0]=slt->a[i]; left=1; right=i-1;

while(left<=right) {

mid=(left+right)/2; if(slt->a[0]a[mid]) right=mid-1; else left=mid+1; }

for(j=i-1;j>=left;j--) slt->a[j+1]=slt->a[j]; slt->a[left]=slt->a[0]; } }

void main() { int i; sequence_list slt; init_sequence_list(&slt); insert_num_sequence_list(&slt); printf(\表为:\\n\

print_sequence_list(slt); printf(\ binarysort(&slt); for(i=2;i<=slt.size;i++) printf(\ printf(\}


C语言简单查找排序方法及代码(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《逍遥游》理解默写

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: