基礎的演算法

weixin_33709219發表於2016-05-16
  1. 插入排序(這個效率還是可以的,一個陣列有8萬個元素,排序大約6秒)
    // 插入排序
    // 思路 : 就是將n個排序的元素看成是一個有序和無序的列表,開始的時候有序的列表只包含一個元素,無序列表中包含n-1個元素,排序的的過程每次從無序的列表中取出第一個元素,吧他的排序碼與有序列表的排序碼進行比較,將他插入到有序列表中的適當位置,使他成為有序的列表。
    void chaRuPaiXu() {

    int a[10]={1,5,9,8,7,6,3,5,8,4};

    for (int i =1;i<10 ;i++){
    // 儲存當前的的array【i】的值;
    int insertVal = a[i];
    // 拿到當前值的前一個index
    int index = i-1;

// 判斷迴圈的條件
while (index>=0&&insertVal >a[index]) {
// 將arr【index】向後移動
a[index+1]=a[index];
// 讓index 向前移動
index--;

    }

// 如果沒有進入迴圈,就不交換位置
a[index+1]=insertVal;
}

for (int j=0 ; j<10; j++) {
    NSLog(@"%d",a[j]);
}
}

// 快速排序 核心思想就是遞迴

void sort (int left ,int right, int array[]){
int l = left;
int r= right;
int pivot = (int)array[(left+right)/2];
int temp =0;
while (l<r) {
while (array[l]<pivot) l++;
while (array[r]>pivot) r--;
if (l>=r) break;
temp = array[l];
array[l]=array[r];
array[r]= temp;

    if (array[l]==pivot) --r;
    if (array[r]==pivot) ++l;
    if (l==r) {
        l++;
        r--; 
    }
    if (left<r) sort(left,r,array);
    if (right>1) sort(1,right,array);
}

}

相關文章