各种排序算法python和java实现(一)

先从最简单的实现冒泡排序:

# -*- coding: UTF-8 -*-
intarray=[3,4,5,1,2,0,6,9,7]
def bubble(array):
    for i in range(1,len(array)):
	    for j in range(i):
		    if array[j] > array[i]:
			    array[j],array[i] = array[i],array[j]
#遍历数组
def print_list(array):
    for i in intarray:
        print i,
#执行排序
bubble(intarray)
#打印
print_list(intarray);

存储为buble.py,命令行模式直接运行python buble.py

package sort;

public class Sort {
	public static void main(String[] args) {
		int[] array = new int[] { 3, 4, 5, 1, 2, 0, 6, 9, 7 };

		bubblesort(array);
		print(array);

	}

	private static void print(int[] array) {
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]);
		}
	}

	private static void bubblesort(int[] array) {
		// 冒泡的趟数,为length - 1
		for (int i = 1; i < array.length; i++) {
			// 第二层循环为每次循环需要冒泡的次数
			for (int j = 0; j < i; j++) {
				if (array[j] > array[i]) {
					int temp = array[j];
					array[j] = array[i];
					array[i] = temp;
				}
			}
		}
	}
}

看完冒泡排序,看一个稍微有点思考的算法,直接插入排序,这种算法适合待排序的集合部分有序,先给出java的实现方式:

/**
	 * 假设当前某个子集有序,选择下个值插入到这个有序的子集中 整个过程主要在于寻找要插入的下标。插入排序在部分子集有序 的情况下非常快。
	 * 初始假设array[0]有序
	 * @param array
	 */
	private static void insertSort(int[] array) {
		// 默认第一个为有序
		int length = array.length;
		int temp;
		int j;
		// 将当前的值插入到有序子集
		for (int i = 1; i < length; i++) {
			// 如果当前值比有序子集的最大值小则执行交换
			if (array[i] < array[i - 1]) {
				// temp存储当前要插入的值,也叫做哨兵
				temp = array[i];
				// 有序子集从0-j,从后向前遍历
				for (j = i - 1; j >= 0; j--) {
					if (temp < array[j]) {
						// 如果哨兵值小于子集的当前值,则将子集的当前值后移
						array[j + 1] = array[j];
					} else {
						// 否则找到哨兵要插入的下标
						break;
					}
				}
				// 插入的下标为j+1
				array[j + 1] = temp;
			}

		}
	}

下面是python的实现:

def insertSort(array):
	length = len(array)
	for i in range(1,length):
		if array[i] < array[i-1]:
			temp=array[i]
			for j in range(0,i)[::-1]:
				if temp < array[j]:
					array[j+1] = array[j]
				else:
					j = j+1
					break
			array[j] = temp

看完直接排序,再来看下选择排序,顾名思义选择排序,每次遍历选择出子集的最小值,看java实现:

/**
	 * 选择排序,每趟选择出子集的最小值,然后交换
	 *
	 * @param array
	 */
	public static void selectionSort(int[] array) {
		int temp, minIndex;
		for (int i = 0; i < array.length; i++) {
			// 假设初始最小值为子集的第一个元素
			minIndex = i;
			for (int j = i + 1; j < array.length; j++) {
				if (array[minIndex] > array[j]) {
					// 找出最小值的下标
					minIndex = j;
				}
			}
			if (minIndex != i) {
				// 交换
				temp = array[i];
				array[i] = array[minIndex];
				array[minIndex] = temp;
			}
		}
	}

再来看python版本:

def selectionSort(array):
	for i in xrange(0,len(array)):
		index = i
		for j in xrange(i,len(array)):
			if array[index] > array[j]:
				index = j
		temp = array[i]
		array[i] = array[index]
		array[index] = temp

以上就是集中简单排序的java和python实现,下一篇讲解几个稍微复杂点得变形排序。

时间: 2024-12-16 19:33:43

各种排序算法python和java实现(一)的相关文章

各种排序算法python和java实现(二)

第一篇博客实现了三种最基本最简单的排序算法,本篇文章将在这三种算法的基础上稍微演变一下. 1.快排 光从名字看就知道速度肯定不差,前一篇讲的冒泡排序,怎么看都不算是一种好的排序算法,里面充斥了太多的无谓的交换动作,时间复杂度倒是很稳定o(n^2),但对于排序算法实在说不过去.快排是冒泡排序的改进版,思路就是分治,将一个序列随机按照某个值分成两个子序列,子序列A里面的值全部比该值大,另一个子序列B的值全部比该值小,这听起来像是二叉排序树.然后依次对子序列进行如上操作,很明显快排最简单的实现就是用递

十大经典排序算法(Python,Java实现)

参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659.html 一.排序算法分类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排 二.算法复杂度 注(

排序算法python实现

参考java版的算法书,使用python重写了一遍.初学,自己写的,代码比较粗糙,意思明白就好. 1 import numpy as np 2 import random 3 ####验证排序算法是否正确 4 a=[x for x in range(35)] 5 random.shuffle(a) 6 print(a) 7 rank(a) ###rank为主函数 8 print(a) 接下来是不同算法实现 1 def exch(a,i,j): 2 t=a[j] 3 a[j]=a[i] 4 a[i

排序算法之冒泡排序Java实现

排序算法之冒泡排序 一.初级的冒泡排序 import java.util.Arrays; /** * * @title BubbleSort * @describe 冒泡排序 * @author 张富昌 * @date 2016年10月1日下午3:56:30 */public class BubbleSortLow { // 起泡排序是快速排序的基础,但是排序速度较慢. // 基本思想:将序列中第 1 个元素与第 2 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换: // 再将第

排序算法之插入排序Java实现

排序算法之直接插入排序 一.直接插入排序的过程 1.直接插入排序由 N-1 趟排序组成.2.基本思想:将第一个元素看成一个有序子序列,再依次从第二个记录起诸葛插入到这个有序的子序列中. 一般地,将 elem[i] 插入到由 elem[0] ~ elem[i-1] 构成的有序子序列中 时间复杂度:O(n) ~ O(n^2) 原始数组为:[74, 27, 85, 59, 41, 66, 37, 92, 4, 93]--------------------------------------第 1趟[

常用排序算法简介以及Java实现代码

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列.分内部排序和外部排序.若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序.反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序. 稳定排序:假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某种排序法排序后,若这些相同关键字的元素的相对次序仍然不变,则这种排序方法是稳定的. 冒泡,插入,基数,归并属于稳定排序 选择,快速,希尔,堆

排序算法之快速排序Java实现

排序算法之快速排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序:http://t.cn/hros0W  快速排序:http://t.cn/ScTA1d  归并排序:http://t.cn/Sc1cGZ 快速排序是一个就地排序,分而治之,大规模递归的算法.从本质上来说,它是归并排序的就地版本. 1.快速排序可以由下面四步组成:(1) 如果不多于1个数据,直接返回.(2

排序算法小结(Java)1:冒泡排序

冒泡排序:冒泡排序是排序算法中较简单的排序算法: 它从第一个元素开始重复地走访过要排序的数列,一次比较两个元素,如果a[j]>a[j+1]就把他们交换过来,知道最后一个元素,这样未被排序的元素中最大元素"浮"到数列顶端:接着对未排序元素重复之前操作,数组完成排序. public class BubbleSort { public void sort(int a[]){ int temp = 0; for(int i=a.length-1; i>0; i--){//i为未被排

[数据结构与算法]排序算法(Python)

1.直接插入排序 给定一个数组后,从第二个元素开始,如果比第一个小,就跟他交换位置,否则不动:第三个元素如果比第二个小,把第三个跟第二个交换位置,在把第二个与第一个比较:..... def insert_sort(arr): length = len(arr) for i in range(1,length): if arr[i] < arr[i-1]: for j in range(i-1,-1,-1): if arr[j+1] < arr[j]: arr[j+1],arr[j] = arr