1. 程式人生 > 其它 >【機器學習基礎】無監督學習(2)——降維之LLE和TSNE

【機器學習基礎】無監督學習(2)——降維之LLE和TSNE

//氣泡排序
for(int i = 0; i < arr.size(); i++)
{
  for(int j = 1; j < arr.size() - i; j++)
  {
    //從第二個數開始,若前一個數比後一個數大,則交換,直到末尾為每次 j 迴圈內最大的數
    if(arr[j - 1] > arr[j])
    {
      int temp = arr[j - 1];
      arr[j - 1] = arr[j];
      arr[j] = temp;
    }
  }
}

//選擇排序
int temp, minindex;
for(int i = 0; i < arr.size(); i++)
{
//預設最小值下標為未排序的第一個
  minindex = i;
  for(int j = i; j < arr.size(); j++)
  {
    //向後遍歷,將更小值的下標更新給 minindex
    if (arr[j] < arr[minindex])
    {
      minindex = j;
    }
  }
  //交換最小值和未排序的陣列中的首個元素
  temp = arr[i];
  arr[i] = arr[minindex];
  arr[minindex] = temp;
}

//插入排序
for(int i = 1; i < len; i++)
{
  //預設第一個數是有序的,
  int temp = a[i];
  int j = i - 1;
  //從已經排序的序列最右邊開始比較,找到比其小的數
  while(j >= 0 && temp < arr[j])
  {
    arr[j + 1] = arr[j];
    j--;
  }
  //存在比其小的數,插入
  arr[j + 1] = temp;
}

//希爾排序
int h = 1;
while(h < len / 3)
{
  //設定增量
  h = h * 3 + 1;
}
while(h >= 1)
{
  for(int i = 0; i < len; i++)
  {
  //相差增量的數進行比較,若前一個數比後一個數大,則交換
    for(int j = i; j >= h &&arr[j-h] > arr[j]; j -= h)
    {
      int temp = arr[j - h];
      arr[j - h] = arr[j];
      arr[j] = temp;
    }
  }
  //直至for迴圈結束,在減小增量重新排序
  h = h / 3;
}