数据结构学习(冒泡、选择、插入、快速排序)

#coding=utf-8

‘‘‘
数据结构排序
‘‘‘
#函数冒泡排序
#   参数alist:被排序的列表
def bubbleSort(alist):
	for num in range(len(alist)-1,0,-1):
		for i in range(num):
			if alist[i] < alist[i+1]:
				#进行当前位置和下一个位置的交换
				alist[i] = alist[i]^alist[i+1]
				alist[i+1] = alist[i]^alist[i+1]
				alist[i] = alist[i]^alist[i+1]
	return alist

#函数选择排序
#   参数alist:被排序的列表
def selectSort(alist):
	for num in range(len(alist)-1,0,-1):
		positionMax = 0
		for index in range(1,num+1):
			if alist[positionMax] < alist[index]:
				positionMax = index

		# temp = alist[num]
		# alist[num] = alist[positionMax]
		# alist[positionMax] =temp

		alist[num] = alist[num]^alist[positionMax]
		alist[positionMax] = alist[num]^alist[positionMax]
		alist[num] = alist[num]^alist[positionMax]
		print alist[num]
	return alist

#函数插入排序
#   参数alist:被排序的列表
def insertSort(alist):
	for index in range(1,len(alist)):
		temp = alist[index]
		protion = index

		while alist[protion-1] > temp and protion > 0:
			alist[protion] = alist[protion-1]
			protion = protion-1

		alist[protion] = temp
	return alist

number=[54,26,93,17,77,31,44,55,21]

#快速排序
#    参数alist:被排序的列表
#    参数low:左侧起始位置
#    参数hegh:右侧终止位置
def quickSort(alist,low,hegh):
	if low < hegh:
		pos = findpos(alist,low,hegh)

		quickSort(alist, low, pos-1)
		quickSort(alist, pos+1, hegh)

	return alist

#快排中查找中间节点
#    参数alist:被产讯的列表
#    参数low:左侧起始位置
#    参数hegh:右侧终止位置
def findpos(alist,left,right):
	temp = alist[left]

	while left < right:
		while left < right and alist[right] >= temp:
			right -= 1
		alist[left] = alist[right]

		while left < right and alist[left] <= temp:
			left += 1
		alist[right] = alist[left]

	alist[right] = temp

	return right

if __name__ == "__main__":

	# #测试冒泡排序:
	# num = bubbleSort(number)
	# print num

	# #调用选择排序
	# num = selectSort(number)
	# print num

	#调入插入排序
	num = insertSort(number)
	print num

	# #快速排序
	# num = quickSort(number, 0, len(number)-1)
	# print num

  

时间: 2024-08-01 19:00:05

数据结构学习(冒泡、选择、插入、快速排序)的相关文章

python 数据结构与算法之排序(冒泡,选择,插入)

目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 计算机重要的几门课: 1.数据结构和算法 2.网络 3.操作系统 4.计算组成原理 数据结构与算法: 算法: 衡量算法的标准: 时间复杂度:就是程序代码执行的大概次数 小结: 时间复杂度是用来估计算法运行时间的一个式子(单位) 一般来说,时间复杂度高的算法比复杂度低的算法慢 常见的

冒泡选择插入希尔归并快速排序等python实现

def bubble_sort(a_list): for pass_num in range(len(a_list) - 1, 0, -1): for i in range(pass_num): if a_list[i] > a_list[i + 1]: a_list[i], a_list[i + 1] = a_list[i + 1], a_list[i] def short_bubble_sort(a_list): exchanges = True pass_num = len(a_list)

冒泡选择插入快速,四种最基础排序算法实现

<?php /** * Created by PhpStorm. * User: chm * Date: 2016/4/1 * Time: 19:35 */ //插入排序特点是一边是排好顺序的,另一边一个一个和顺序的数据对比,每次对比插入一个 function charu($arr) { $len = count($arr); //先给出一个原数组 echo "原数组为:"; for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo

冒泡 选择 插入 希尔 堆 归并 快速 排序算法

排序相关概念 排序:对一序列对象根据某个关键字进行排序: 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排序操作都在内存中完成: 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行: 排序耗时的操作:比较.移动: 排序分类: (1)交换类:冒泡排序.快速排序:此类的特点是通过不断的比较和交换进行排序: (2)插入类:简单插入排序.希尔排序:此类的特点是通过插入的

数据结构学习笔记06排序 (快速排序、表排序)

1.快速排序 不稳定 分而治之 找主元pivot,小于主元划分为一个子集,大于主元的划分为一个子集 然后进行递归 最好情况:每次主元正好中分,T(N) = O( NlogN ) 选主元 的方法有很多,这里用 取头.中.尾的中位数. 直接选A[0]为pivot,时间复杂度T ( N ) = O( N ) + T ( N–1 ) = O( N ) + O ( N–1 ) + T( N–2 ) = = O( N ) + O ( N–1 ) + …+ O( 1 ) = O( N^2 ) 随机取pivot

java中各种经典排序(冒泡 选择 插入 希尔等)

1 import java.util.Arrays; 2 3 public class ArraySort { 4 public static void main(String[] args) { 5 int[] arr = { 12, 23, 14, 5, 64, 35, 42 }; 6 System.out.println("排序前:"); 7 System.out.println(Arrays.toString(arr)); 8 // bubbleSort(arr); 9 //

数据结构学习之选择排序

1.直接选择排序:  先上图: 说实话,直接选择排序最类似于人的本能思想,比如把大小不一的玩具让三岁小毛孩对大小排个序, 那小孩首先会在这么多玩具中找到最小的放在第一位,然后找到次小的放在第二位,以此类推...... 第一步: 我们拿80作为参照物(base),在80后面找到一个最小数20,然后将80跟20交换. 第二步:  第一位数已经是最小数字了,然后我们推进一步在30后面找一位最小数,发现自己最小,不用交换. 第三步:........ 程序源码为: 1 package com.swust.

基本排序-冒泡/选择/插入(python)

# -*- coding: utf-8 -*- import random def bubble_sort(seq): n = len(seq) for i in range(n-1): print(seq) for j in range(n-1-i): if seq[j] > seq[j+1]: seq[j], seq[j+1] = seq[j+1], seq[j] print(seq) def test_bubble_sort(): seq = list(range(10)) random.

排序算法-冒泡、插入、归并、希尔、快速、选择--代码总结

冒泡排序代码: #include <iostream> #include <string> using namespace std; template<class ItemType> void bubbleSort(ItemType theArray[], int n) { bool sorted = false; // False when swaps occur int pass = 1; while (!sorted && (pass < n

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

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