Tag: 快速排序

改进快速排序

如果可能,我如何改进以下快速排序(性能明智)。 有什么建议? void main() { quick(a,0,n-1); } void quick(int a[],int lower,int upper) { int loc; if(lower<upper) { loc=partition(a,lower,upper); quick(a,lower,loc-1); quick(a,loc+1,upper); } } /* Return type: int Parameters passed: Unsorted array and its lower and upper bounds */ int partition(int a[],int lower,int upper) { int pivot,i,j,temp; pivot=a[lower]; i=lower+1; j=upper; while(i<j) { while((i<upper)&&(a[i]pivot)) j–; if(ia[j]) { temp=a[j]; […]

单链接列表上的快捷方式

我正在尝试在单个链表上为QUICKSORT编写一个简单的C代码。 程序将获得一个txt文件,其中包含密码和使用此密码的频率。 程序应按顺序对密码进行排序。 有人可以告诉我如何编写函数void qsort_list,因为我不明白如何获得“partiition()”需要的3个参数。 #include #include #include typedef struct list_element{ char passwort[100]; int haufigkeit; struct list_element *next; } list_element; typedef struct list{ list; void init_list(list* mylist) { mylist->first=NULL; mylist->last=NULL; } void insert_front(list_element* le, list* mylist) { // HIER Code einfügen if(mylist->first == NULL){ le->next = mylist-> first; mylist->first=le; mylist->last=le; } else { le->next = […]

我想使用链表快速排序

编写一个函数,通过引用获取两个学生记录结构,并交换除下一个指针之外的所有内容。 使用您的函数实现冒泡排序算法以对链表进行排序(不要使用数组)。 #include #include #include /*defined a structure for date of birth*/ struct birth{ int date; int month; int year; }; struct studentrecord{ char name[64]; struct birth dob; int height; float weight; struct studentrecord *next; struct studentrecord *prev; }; struct studentrecord* printlist(struct studentrecord* p){ if(p==NULL) return 0; printf(“%s\t%2d%2d%4d\t%d\t%.2f\n”,p->name,(p->dob).date,(p->dob).month,(p- >dob).year,p->height,p->weight); printlist(p->next); } /*swapped all the contents […]

C中的QuickSort无法按预期工作

我尝试在C中实现QuickSort,但没有得到正确的结果。 这是我写的程序。 #include int partition(int a[],int low,int high) { int pivot = a[high]; int temp; int i = low-1; int j=0; for(j=0;j<high-1;j++) { if(a[j]<=pivot) { i=i+1; temp = a[i]; a[i] = a[j]; a[j] = temp; } } temp = a[i+1]; a[i+1] = pivot; a[high] = temp; return (i+1); } void quick_sort(int a[],int low,int high) { […]

带链接列表的快速排序

我写下了以下程序,该程序使用快速排序算法来排序使用链接列表将多少整数放入命令行。 我不仅得到关于混合声明的ISO C90错误,而且我的代码中某处存在内存泄漏,我不知道如何修复它。 任何帮助,将不胜感激! #include #include “linked_list.h” #include #include “memcheck.h” #include #include node *quicksort(node *list); int ListLength (node *list); int main(int argc, char *argv[]) { if (argc == 1) { fprintf(stderr, “usage: %s [-q] number1 number2 … \ (must enter at least one argument)\n”, argv[0]); exit(1); } node *list; node *sorted_list; int i; int intArg […]

quicksort特殊情况 – 似乎是K&R的错误算法

我在解决K&R的快速排序算法(没有指针的简化版本)时遇到了问题。 Dave Gamble在此解释已经有了彻底的解释 。 但是我注意到,从稍微改变的字符串开始,我们可以在for循环的许多循环中获得没有交换。 首先是代码: void qsort(int v[], int left, int right) { int i, last; void swap(int v[], int i, int j); if (left >= right) /* do nothing if array contains */ return; /* fewer than two elements */ swap(v, left, (left + right)/2); /* move partition elem */ last = left; […]

用C编程的快速排序

我正在阅读K&R的ANSI C. 我遇到了qsort计划。 我想要一些帮助。 假设我有9个索引为0-> 8的元素。 请阅读评论,看看我是否理解正确。 非常感谢您的努力 void qsort(int v[] , int left, int right) { int i, j, last; void swap(int v[], int i, int j); if(left >= right) /*if the array has only one element return it*/ return; swap(v,left, (left+right)/2); /* now, left=(left+right)/2= 0+8/2= 4 we have 4 as left*/ last= left; […]

无法快速排序变得稳定排序?

方法1 CAR Hoare引入了分区逻辑(如下所示),这是在学校教授的, low = pivot = 0; i = 1; j = high = listSize-1; while (true) { while (a[i] <= a[pivot] && (i = a[pivot] && (j > low)) { j = j – 1; } if (i >= j) break; swap(a[i], a[j]) } swap(a[j], a[pivot]); // pivot element is positioned(once) return j; […]

使用多个排序条件对数组进行排序(QuickSort)

我试图找出(使用快速排序算法)如何通过2个标准对结构数组进行排序。 比如说我有一个结构: struct employee{ char gender[12]; char name[12]; int id; }; 说我的输入是: struct employee arr[3]= { {“male”,”Matt”,1234}, {“female”,”Jessica”,2345}, {“male”,”Josh”,1235} }; 我想先按性别对元素进行排序,然后按升序对ID进行排序。 一个例子是,所有的男性首先打印出他们的ID,然后是所有的女性。 我试图这样做而不使用qsort函数,但我没有丝毫想法如何检查。 这是我的排序function: void quicksort(struct employee *arr, int left, int right) { int pivot, l, r, temp; if(left < right) { p = left; l = left; r = right; while(l < r) { […]

QuickSort和Hoare分区

我很难将QuickSort与Hoare分区转换为C代码,但无法找到原因。 我正在使用的代码如下所示: void QuickSort(int a[],int start,int end) { int q=HoarePartition(a,start,end); if (end x); do i++; while (a[i] < x); if (i < j) swap(&a[i],&a[j]); else return j; } } 另外,我真的不明白为什么HoarePartition有效。 有人可以解释它为什么有效,或者至少把我链接到一篇文章吗? 我已经看到了分区算法的逐步完成,但我没有直观的感觉。 在我的代码中,它似乎甚至没有用。 例如,给定数组 13 19 9 5 12 8 7 4 11 2 6 21 它将使用数据透视表13,但最终会使用数组 6 2 9 5 12 8 7 4 […]