[C语言冒泡排序]#include<stdio.h> #define MAX 10 // #include <stdio.h> #define N 10 int main (){ int i,j,t,a[N]; printf("please input ten numbers:\n"); for (i=0;i<N;i++) scanf("%d...+阅读
typedef struct student { //...... int keyword; //...... struct student *next; }Stu; void Sort(Stu *head) { // head为有头结点的非循环链表 Stu *p,*s,*pt; p = head; s = p->next; while(p->next != NULL) { while(s->next != NULL) { if(p->next->keyword < s->next->keyword) { pt = p->next; p->next = s->next; s->next = p->next->next; p->next->next = pt; } else s = s->next; } p = p->next; s = p->next; } }
单链表冒泡排序
我估计楼主是写链表排序被各种指针操作绕迷糊了。提供一个清晰的思路:反向冒泡,步骤如下:
1。从链表头开始操作,将第一个元素和后面的比较,将大者换到后面去。反复操作直至链表尾。
2。链表尾提前一位(因为最后一个元素已经是最大值,无需再处理了)
3。重复1,2步 ,直至链表尾等于链表头,既表明处理结束
struct Node { int value; Node* next; };
void Sort(Node* head) { Node* tail = NULL;
while(tail != head->next) { Node* pre = head; Node* cur = pre->next; while(cur != tail && cur->next != tail) { if( cur->value > cur->next->value ) { //交换当前节点和后一个节点 pre->next = cur->next; cur->next = cur->next->next; pre->next->next = cur; } pre = pre->next; cur = pre->next; }
tail = cur; } }
void main() { Node* head = new Node(); Node* cur = head; //使用带表头的链表 int n = 10; //初始化链表数据 for( int i = n; i >0; i-- ) { Node* node = new Node(); node->value = i; cur->next = node; cur = node; }
//排序
Sort(head); }
输入和输出排序相信楼主自己可以搞定。所以就不提供了。主要还是提供链表冒泡的思路。
cur指针其实可以取消,用pre->next即可代替。不过为了理解方便特意加上,cur指针表示当前处理的节点,cur->next表示后一个节点
C单向链表冒泡排序
#includeusing namespace std; #define NULL 0 struct student { int banji; student *next; }; int n; int main() { student *creat(void); void print(student *); student *paixu(student *); student *head; coutbanji!=0) { n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=new student; cin>>p1->banji; } p2->next=NULL; return(head); } void print(student *head) //输出链表的函数 { student *p; coutnext->next; p->next=q->next; p->next->next = q; q->next = temp; } p=p->next; q=p->next; } tail=q; } p=head->next; free(head); return p; }
以下为关联文档:
C语言冒泡排序法是怎么排序的C语言冒泡排序法的排2113序规则:5261 将被排序的记录4102数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡1653。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡...
C语言实现七种排序算法的演示代码!(1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列...
c语言的冒泡排序#include <iostream> using namespace std; int main() { int a[11]; int i,j,k; for(i=0;i<10;i++) cin>>a[i]; for(i=0;i<10;i++) for(j=i+1;j<10;j++) //注意这里j=i+1 i...
汇编语言冒泡排序算法N equ 10.model small .data array dw N dup(?) .code main proc far mov ax,data mov ds,ax mov cx,Ndec cxloop1: mov di,cx mov bx,0 loop2: mov ax,array[bx] cmp ax,ar...
C语言高效排序算法的原理及代码快速排序是通过分治的思想来实现的。即找一个 中间数,让小于这个数字的放在他左边,大于这个数字的放在右边!然后逐渐放小! 以升序为例: int qsort(ArrayStule *aS,int low,int hi...
用C语言的函数做冒泡法排序#include #define M 10 void Bubble(int a[]) { int t; for(int i=0;ifor(int j=i+1;jif(a[j]>a[i]) { t=a[j]; a[j]=a[i]; a[i]=t; } for(i=0;icout} void main() { int a[...
C语言冒泡排序算法要用函数从小到大排序 void paixu(double a[],int N) { double temp; int i,j; for(i=0;i<N;i++) { for(j=i+1;j<N-i;j++) { if(a[i]>a[j]) {temp=a[i];a[i]=a[j];a[j]=temp;} } } }...
选择排序冒泡排序 C语言从程序运行需要的时间和储存空间来看,这两个吧,选择排序用的时间较少。我给你举个例子,这是一个比较直观的例子: 有十个数:10,9,8,7,6,5,4,3,2,1 。将他们按从小到大的顺序排成一...
C语言实现冒泡排序选择排序插入排序及其移动次数你说的排序我给你源代码,在代码里面简单的说了一下算法思想。如果是要学习,我建议去看书和看别人的博客,明白排序的思想,只有明白了算法的思想,才能轻易的看懂排序的代码。我的代...