1. 程式人生 > >最壞時間複雜度為N^2排序(冒泡-選擇-插入)

最壞時間複雜度為N^2排序(冒泡-選擇-插入)

氣泡排序

public void bubblesort(int a[])
	{
		int len=a.length;
		int i=len-1;
		int last=0;
		
		while(i>0)
		{
			last=0;
			for(int j=0;j<i;j++)
			{
				if(a[j]>a[j+1])
				{
					int temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
					last=j;
				}						
			}
			i=last;
		}
				
	}

選擇排序
	public int[] SelectionSort(int a[])
	{
		int len=a.length;	 
		
		for(int i=0;i<len-1;i++)
		{
			int min=i;	
			for(int j=i+1;j<len;j++)
			{
				if(a[j]<a[min])
				{
					min=j;					
				}
			}
			
			int temp=a[i];
			a[i]=a[min];
			a[min]=temp;
		}
		return a;
		
	}

插入排序
	public int [] InsertSort(int []a)
	{
		int len=a.length;
		
		for(int i=0;i<len-1;i++)
		{
			int m=a[i+1];
			
			for(int j=i+1;j>0;j--)
			{			
				if(a[j-1]<m)
				{
					int temp=a[j];
					a[j]=a[j-1];
					a[j-1]=temp;
				}
			}
		}
		
		return a;
	}


相關推薦

時間複雜N^2排序冒泡-選擇-插入

氣泡排序 public void bubblesort(int a[]) { int len=a.length; int i=len-1; int last=0; while(

演算法導論 第二章:演算法入門 筆記 插入排序、迴圈不變式、演算法分析、最好和時間複雜選擇排序、分治法、合併排序

插入排序: 排序問題的定義如下: 輸入:N個數{a1, a2,..., an }。 輸出:輸入序列的一個排列{a'1 ,a'1 ,...,a'n },使得a'n <=a' n<=...<

JavaScript 演算法之最好、時間複雜分析

上一篇文章中介紹了複雜度的分析,相信小夥伴們對常見程式碼的時間或者空間複雜度肯定能分析出來了。 思考測試 話不多說,出個題目考考大家,分析下面程式碼的時間複雜度(ps: 雖然說並不會這麼寫) function find(n, x, arr) { let ind = -1;

計數排序--時間複雜線性的排序演算法

    我們知道基於比較的排序演算法的最好的情況的時間複雜度是O(nlgn),然而存在一種神奇的排序演算法,不是基於比較的,而是空間換時間,使得時間複雜度能夠達到線性O(n+k),這種演算法就是本文將

並行排序演算法——時間複雜O(n)的排序

最近老師講了並行的排序演算法,讓我對這個原來不是很瞭解的排序演算法產生了濃厚的興趣。並行排序方法,是指採用平行計算的方法對一組資料進行排序,理論上是在類似內排序的環境下,採用多核並行的方法讓時間降低,排序的複雜度最好的情況下能降低至O(n)左右。 排序的實質

函式時間複雜的計算詳解轉自CSDN

轉自:http://blog.csdn.net/flyfish1986/article/details/46994347    http://www.cnblogs.com/SCAU_que/articles/1735784.html 函式的漸近增長:給定兩個函式f

大連續子序列的和,時間複雜 O(n)

練習題目 給定陣列 [ a0, a1, a2, …, an ] ,找出其最大連續子序列和,要求時間複雜度為 O(n),陣列包含負數。 例如:輸入 [ -2,11,-4,13,-5,-2] ,輸出 20(即 11 到 13)。 解答 關於這個問題有很多種解法,這裡介紹一種時間複雜度僅為 O(n)

同時找出陣列的大值和小值,要求時間複雜on

#include <stdio.h> void max_min(int A[],int n,int& max,int& min) { int i; if(n%2==0) { if(

Manacher演算法:求解長迴文字串,時間複雜O(N)

迴文串定義:“迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。迴文子串,顧名思義,即字串中滿足迴文性質的子串。 經常有一些題目圍繞回文子串進行討論,比如POJ3974最長迴文,求最長迴文子串的長度。樸素演算法是依次以每一個字元為中心

時間複雜O(m*n)長公共子串

什麼叫最長公共子串,就是兩個字串當中最長的連續的公共子串,注意連續;而子序列可以不連續,順序一樣即可,不要混淆。 對於兩個子串,我們先找出短字串L中(長的也可以)每個字元在長字串H中的位置,這樣我們就構建出一個二維表: L:deasdfe1ra H:unnasdsdfew3

已知長度n的線性表A採用順序儲存結構,請寫一個時間複雜On、空間複雜O1的演算法,該演算法可刪除線性表中所有值item的資料元素。

語言:C++ #include <iostream> using namespace std; typedef int ElemType; //定義 #define MAXSIZE 100 typedef struct {ElemType *elem; int length;}Sq

棧表中獲取小值,時間複雜O(1)

       近期複習資料結構,看到網上有一道演算法題,該題目曾經是google的一道面試題,國內的網際網路公司也紛紛效仿。我也順便複習之。        題目內容為:對現在的stack(棧)資料結構進行改進,加一個

實現一個棧,要求實現Push出棧、Pop入棧、Min返回小值時間複雜O1

這道題考查棧的知識點,要求實現一個棧,在對這個棧進行入棧和出棧以及返回最小棧元素時要求時間複雜度為O(1)。 方法一: 用兩個棧,一個正常出入棧,另一個存最小棧,入棧的時候第一個站正常入,最小棧如果為空或者要入的data比最小棧的棧頂元素小的時候才給最小棧入棧。

設任意n個整數存放於陣列A[1..n]中,試編寫演算法,將所有正數排在所有負數前面要求:演算法時間複雜On

注意陣列的實際長度 #include <iostream> using namespace std; void sort(int A[],int n) { int i=0;//陣列的頭下標 int j,x; j=n-1;//陣列的尾下標 while

在一個含有空格字元的字串中加入XXX,演算法時間複雜O(N)

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-18 下午10:54:54 * 類說明 */ /** * @author jueying

時間複雜On排序演算法

我們常用的幾種排序演算法,氣泡排序,選擇排序,它們已經是相對比較簡單,穩定的排序演算法了,但是它們時間複雜度為O(n*n),基本都要用到兩層迴圈,今天我就像大家介紹一種簡單,只用一層for迴圈,時間複雜度為O(n)的排序演算法。 樣例輸入:1 4 5 6 3 4 2 8 9 1 樣例輸出

【資料結構】實現一個棧要求實現Push(出棧)Pop(入棧)Min(返回小值)的時間 複雜O(1)

文章目錄 思路 MinStack.h MinStack.c Test.c 棧的基本實現: https://blog.csdn.net/weixin_41892460/article/details/8297385

【2019新浪&微博筆試題目】判斷連結串列是否迴文結構,空間負責O(1),時間複雜O(n)

原題描述 判斷一個連結串列是否為迴文結構,要求額外空間複雜度為O(1),時間複雜度為O(n) 解題思路 一、雙向連結串列 如果連結串列是雙向連結串列,那簡直不要太完美。直接從連結串列兩端向中間遍歷即可判定 可惜,這個題目肯定不會說的是這種情況,

實現一個棧,要求實現出棧、入棧、返回小值的時間複雜O1

  由棧的一些基本操作,很容易使出棧和入棧的時間複雜度為O(1),但是由於入棧資料元素順序不一定是有序的,故不能直接實現返回最小值的時間複雜度為O(1)。下面提供兩種方法: (一)設定一個特殊的資料結構型別,包括兩個棧_data棧和_mindata棧,_data棧和原來的棧

1.給棧新增一個獲取小值的方法元素Integer型,要求時間複雜O(1)

分析:在資料結構與演算法中,當要求時間複雜度最小時基本都是要犧牲空間複雜度。棧是先進後出,此處要求用棧實現一個獲取最小值的方法且時間複雜度為O(1),首先考慮的方向就是再借助一個棧來實現,這個棧主要用來儲存最小值序列(這個地方可以思考一下為什麼不能用一個變數來儲存最小值)。 下面直接附上程式碼: