#ifndef alsg4_h__
#define alsg4_h__
#include
#include
#include
#include
typedef
unsigned
char byte;
typedef
char* string;
typedef
struct int_array intarray;
extern
unsigned
long numberofless;
extern
unsigned
long numberofexch;
int isempty(void);
int readint(void);
double readdouble(void);
float readfloat(void);
long readlong(void);
char readchar(void);
byte readbyte(void);
string readstring(void);
/*** 讀取輸入
*/intarray readints(void);
void free(intarray);
double* readdoubles(string name);
string* readstrings(string name);
/*** 排序演算法 實現在sort.c中
*/void selection(intarray); //選擇排序
void insertion(intarray); //插入排序
void shell(intarray); //希爾排序
void quick(intarray a);
void quick_sort(int *, int, int);
int partition(int *, int, int);
void mergebu(intarray a);
void merge(intarray);
void merge(int *, int, int, int, int *);
void merge_sort(int *,int , int, int *);
//排序演算法公共函式
int less(int , int ); //比較函式
void exch(int *,int ,int); //交換函式
int issorted(intarray a);
intarray intarraycopy(intarray);
intarray randomintarray(int,int,int);
intarray orderintarray(int);
intarray reverseorderintarray(int);
#endif
#include "algs4.h"
int readint(void)
intarray readints(void) ;
int n;
a.arr=(int*)calloc(a.length,sizeof(int));
while(scanf("%d",&n)!=eof)
return a;
}intarray intarraycopy(intarray a)
void free(intarray a)
intarray randomintarray(int min,int max,int size)
intarray orderintarray(int size)
intarray reverseorderintarray(int size)
#include "algs4.h"
unsigned
long numberofless = 0;
unsigned
long numberofexch = 0;
//選擇排序
void selection(intarray a)
gettimeofday(&end,null);
timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
printf("selection:arraysize=%-10d numberofless=%-10ld numberofexch=%-10ld sumles***ch=%-10ld timer=%ld us.\n",
a.length,numberofless,numberofexch,numberofless+numberofexch,timer);
}//插入排序
void insertion(intarray a)
gettimeofday(&end,null);
timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
printf("insertion:arraysize=%-10d numberofless=%-10ld numberofexch=%-10ld sumles***ch=%-10ld timer=%ld us.\n",
a.length,numberofless,numberofexch,numberofless+numberofexch,timer);
}//希爾排序
void shell(intarray a)
h = h/3;
}gettimeofday(&end,null);
timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
printf("shell :arraysize=%-10d numberofless=%-10ld numberofexch=%-10ld sumles***ch=%-10ld timer=%ld us.\n",
a.length,numberofless,numberofexch,numberofless+numberofexch,timer);
}//歸併排序
void quick(intarray a)
void merge(intarray a)
void mergebu(intarray a)
int less(int v, int w)
void exch(int *a,int i,int j)
int issorted(intarray a)
void merge_sort(int *a,int lo, int hi,int *aux)
void merge(int *a, int lo, int mid, int hi, int *aux)
void quick_sort(int *a, int lo, int hi)
int partition(int *a,int lo,int hi)
exch(a, lo, j);
return j;
}
#include "algs4.h"
int main()
編譯:gcc test.c sort.c algs4.c
執行:./a.out
《演算法(第四版)》排序 模板
本書對排序類演算法有乙個模板,包括了以下幾種方法 1 sort 這個方法裡面實現的就是排序的演算法 2 less 這個方法裡是利用了comparable介面裡的compareto方法,其中compareto方法對於本物件與傳入的比較物件小於,等於,大於,分別返回負數,0,正數 這個方法如果compa...
《演算法(第四版)》排序 希爾排序
由 插入排序 可知,它是一種不穩定的演算法,當序列已經接近有序時,排序速度較快,但是如果最小的在最後面,那可能需要最小的交換了n 1次才能換到最前面。希爾排序在插入排序的基礎上進行了改進,交換不相鄰的元素,以對陣列的區域性進行排序,並最終用插入排序將區域性有序的陣列排序,具體做法如下。1.假設陣列長...
《演算法(第四版)》排序 堆排序
1.什麼是堆?講堆排序之前,先了解一下什麼是堆。堆其實相當於一種資料結構,它的本質是一種陣列物件,但是它裡面的內同又是一顆完全二叉樹結構,它的特點是父節點的值大於 或小於 兩個子節點的值,常常用於優先佇列 堆排序等。堆在陣列中的索引有如下的特點。陣列索引為k的元素,它的父節點的索引為 k 2 下取整...