1. 程式人生 > 其它 >時間複雜度和簡單排序演算法

時間複雜度和簡單排序演算法

時間複雜度和簡單排序演算法

認識時間複雜度

時間複雜度為一個演算法流程中,常數運算元量的一個指標。具體來說,先要對一個演算法流程非常熟悉,然後去寫出這個演算法流程中,發生了多少常熟操作,進而總結出常數運算元量的表示式。

在表示式中只要高階項,剩下的部分如果為f(N),那麼時間複雜度為O(f(N))

簡單排序演算法

引用自[十大經典排序演算法]

氣泡排序

從第一個數開始比較相鄰的元素,如果第一個比第二個大,就交換它們兩個,重複直到排序完成。

程式碼引用自[氣泡排序)

java程式碼

public class BubbleSort implements IArraySort{

@Override
public int[] sort(int[] sourceArray) throws Exception{
//對arr進行拷貝,不改變引數內容
int[] arr=Array.copyOf(sourceArray,sourceArray.length);

for(int i=1;i<arr.length;i++){
//設定一個標記,若為true,則表示此次迴圈沒有進行交換,也就是待排序列已經有序,排序已經完成。
boolean flag=true;

for(int j=0;j<arr.length-i;j++){
if(arr[j]>arr[j+1]){
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;

flag=false;
}
}

if(flag){
break;
}
}
return arr;
}
}

C語言程式碼

#include<stdio.h>
void bubble_sort(int arr[],int len){
int i,j,temp;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
int main(){
int arr[]={22,34,3,32,82,55,89,50,37,5,64,35,9,70};
int len=(int) sizeof(arr)/sizeof(*arr);
bubble_sort(arr,len);
int i;
for(i=0;i<len;i++)
printf("%d ",arr[i]);
return 0;
}

C++程式碼

#include<iostream>
using namespace std;
template<typename T> //整數或浮點數皆可使用,若要使用類(class)或結構體(struct)時必須過載大於(>)運算子
void bubble_sort(T arr[],int len){
int i,j;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
int main(){
int arr[]={61,17,29,22,34,60,72,21,50,1,62};
int len=(int) sizeof(arr)/sizeof(*arr);
bubble_sort(arr,len);
for(int i=0;i<len;i++){
cout<<arr[i]<<' ';
cout<<endl;
float arrf[]=17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 };
len=(float) sizeof(arrf)/sizeof(*arrf);
bubble_sort(arrf,len);
for(int i=0;i<len;i++)
cout<<arrf[i]<<' '<<endl;
return 0;
}
}