链表的排序 (选择和冒泡)

无聊写了个单链表排序,不是很难。但是插入写起来很麻烦,都没有,本文全部是将链表中节点值互换,不改变结构,所以很容易写出来


#include<iostream>
using namespace std;
struct node
{
int n;
struct node* next;

};
//创建链表
void swap(int &a,int &b)
{
int c=a;
a=b;
b=c;
}
node* create(int a[],int len)
{
if(len==0) return NULL;
node *head=new node;
head->n=a[0];
head->next=NULL;

node *tail=head;
for(int i=1;i<len;i++)
{
node *temp=new node;
temp->n=a[i];
temp->next=NULL;
tail->next=temp;
tail=temp;

}

return head;

}
void display(node *head)
{
node *p=head;
while(p!=NULL)
{
cout<<p->n<<"\t";
p=p->next;

}

cout<<endl;

}
//冒泡
void bubble(node *head)
{
if(head==NULL) return;
node *end=NULL;

while(end!=head)
{
node *p=head;
node *pnext=head->next;
while(pnext!=end)
{
if(p->n>pnext->n)
{
swap(p->n,pnext->n);

}
p=p->next;
pnext=pnext->next;

}
end=p;

}

}
void choose(node *head)
{

node *beg=head;
while(beg->next!=NULL)
{
node *p=beg->next;
while(p!=NULL)
{
if(p->n<beg->n)
{
swap(p->n,beg->n);
}

p=p->next;
}

beg=beg->next;

}

}

int main()
{
int a[]={2,3,4,-5,2,44,23};
int len=sizeof(a)/sizeof(int);
node *head=create(a,len);
cout<<"选择排序"<<endl;
choose(head);
display(head);
cout<<"冒泡排序"<<endl;
bubble(head);

display(head);
system("pause");

return 0;
}

链表的排序 (选择和冒泡)

时间: 2024-10-09 07:42:17

链表的排序 (选择和冒泡)的相关文章

排序算法(一)3种简单排序(选择,冒泡,插入)

排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现.但是了解这些精妙的思想对我们还是大有裨益的.本文简单温习下最基础的三类算法:选择,冒泡,插入. 先定义个交换数组元素的函数,供排序时调用 /** * 交换数组元素 * @param arr * @param a * @param b */ public static void swap(int []arr,int a,int b){ arr[a] = arr[a]

三大基本排序--选择、冒泡、插入

引言: 老师已经是第三次跟我们讲排序了,可想而知排序它的重要性,这三种基本排序的方式值得我们思考和研究,理解其中的思想. 简述: 概念: 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序 常见排序算法: 快速排序.希尔排序.堆排序.直接选择排序不是稳定的排序算法,而基数排序.冒泡排序.直接插入排序.折半插入排序.归并排序是稳定的排序算法. 选择排序: 原理: 将初始序列(A[0]~A[n-1])作为待排序序列,按照从小到大进行排序,假设现在A[0]是最小的,将剩余的元素与其进行

图解排序算法(一)之3种简单排序(选择、冒泡、直接插入)

先定义个交换数组元素的函数,供排序时调用 /** * 交换数组元素 * @param arr * @param a * @param b */ public static void swap(int []arr,int a,int b){ arr[a] = arr[a]+arr[b]; arr[b] = arr[a]-arr[b]; arr[a] = arr[a]-arr[b]; } 简单选择排序(O(n^2)) 简单选择排序是最简单直观的一种算法. 基本思想:每一趟从待排序的数据元素中选择最小

常见排序算法(冒泡、选择、插入、快速、归并C++实现)

常见排序算法(冒泡.选择.插入.快速.归并C++实现) #include <iostream> using namespace std; // 冒泡排序 void bubbleSort (int data[], size_t size) { for (size_t i = 0; i < size - 1; ++i) { bool ordered = true; for (size_t j = 0; j < size - 1 - i; ++j) if (data[j+1] <

简单排序:插入,选择和冒泡

void selectsort(int a[],int n) // 选择排序的思路就是每次找到当前序列中最小的元素,然后交换 { // 就是选择最小的,然后交换 int i,j,flag; for(i = 0;i<n;i++) { flag = i; //当前元素 for(j = i+1;j<n;j++) { if(a[j]<a[flag]) flag = j; //在剩下未排序的数组中找到最小元素的下标 } int temp = a[i]; //交换当前元素和最小元素. a[i] =

基于比较的排序---选择、插入、冒泡

初学排序时,也比较模糊,多是照猫画虎,不能透彻理解.今天对几种简单的排序的做一小结.日后继续学习.总结更多地.性能更优的排序! 一.选择排序 先把代码贴上 1 #include<stdio.h> 2 int main() 3 { 4 int a[9] = {5,7,4,6,1,9,3,2,8}; 5 int len = sizeof(a)/sizeof(int); 6 int i,j,min,temp,m; 7 for(i = 0; i < len; i++) 8 { 9 min = i

链表值排序之冒泡

1 #include <stdio.h> 2 #include <stdlib.h> 3 /* 4 链表值排序之冒泡:核心思想:1.每次都从头开始比较 5 2.推动链表往下走的不在是下标 6 */ 7 typedef struct node 8 { 9 int data; 10 struct node * next; 11 }NODE; 12 NODE * createList() 13 { 14 NODE *head = (NODE *)malloc(sizeof(NODE));

排序算法-(冒泡、选择、插入算法)

运行效率较慢的三大排序算法:冒泡.选择与插入算法,时间复杂度都为O(n2),运行效率较慢. #python 代码实现如下所示: li=[2,1,4,5,7,8,9,5,3]#冒泡算法(升序算法)O(n2)import randomfrom cal_time import *@cal_timedef bubble_sort(li): for i in range(len(li)-1): #第i趟 exchange=False for j in range(len(li)-i-1): #无序区域为n

js排序算法总结——冒泡,快速,选择,插入,希尔,归并

相信排序是任何一个程序猿都会用到的东西,今天简单总结记录下常见的排序算法. 一.冒泡排序 说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放在前面: 如 var arr = [7, 3, 10, 1, 8, 4, 2, 4, 4, 3] 进行升序排列,排序过程如下 第一次 [3, 7, 1, 8, 4, 2, 4, 4, 3, 10] 第二次 [3, 1, 7, 4, 2, 4, 4, 3, 8, 10] 以此类推 .... 结果 [1